Skip to content
This repository was archived by the owner on Feb 6, 2026. It is now read-only.

Commit b7612fb

Browse files
committed
feat: allow opt-out auto-population of the log entry metadata on write() (#798)
Allows to opt-out auto populate log entry metadata on write in the write() API and Logging instance levels. Tests WriteOption to out-out auto populating metadata. Tests LoggingOption to out-out auto populating metadata. Tests default LoggingOption for auto populating metadata. Refactors LoggingOptions tests. Refactors LoggingOptions auto populate metadata getter method. Fixes cast compilation warning.
1 parent 013bb50 commit b7612fb

File tree

5 files changed

+54
-15
lines changed

5 files changed

+54
-15
lines changed

google-cloud-logging/src/main/java/com/google/cloud/logging/Logging.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ enum OptionType implements Option.OptionType {
7070
LOG_NAME,
7171
RESOURCE,
7272
LABELS,
73-
LOG_DESTINATION;
73+
LOG_DESTINATION,
74+
AUTO_POPULATE_METADATA;
7475

7576
@SuppressWarnings("unchecked")
7677
<T> T get(Map<Option.OptionType, ?> options) {
@@ -114,6 +115,14 @@ public static WriteOption labels(Map<String, String> labels) {
114115
public static WriteOption destination(LogDestinationName destination) {
115116
return new WriteOption(OptionType.LOG_DESTINATION, destination);
116117
}
118+
119+
/**
120+
* Returns an option to opt-out automatic population of log entries metadata fields that are not
121+
* set.
122+
*/
123+
public static WriteOption autoPopulateMetadata(boolean autoPopulateMetadata) {
124+
return new WriteOption(OptionType.AUTO_POPULATE_METADATA, autoPopulateMetadata);
125+
}
117126
}
118127

119128
/** Fields according to which log entries can be sorted. */

google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingConfig.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,11 @@ List<LoggingEnhancer> getEnhancers() {
8888
if (list != null) {
8989
String[] items = list.split(",");
9090
for (String e_name : items) {
91-
Class<? extends LoggingEnhancer> clz =
92-
(Class<? extends LoggingEnhancer>)
93-
ClassLoader.getSystemClassLoader().loadClass(e_name);
94-
enhancers.add(clz.getDeclaredConstructor().newInstance());
91+
Class<? extends LoggingEnhancer> clazz =
92+
ClassLoader.getSystemClassLoader()
93+
.loadClass(e_name)
94+
.asSubclass(LoggingEnhancer.class);
95+
enhancers.add(clazz.getDeclaredConstructor().newInstance());
9596
}
9697
}
9798
return enhancers;

google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingOptions.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public class LoggingOptions extends ServiceOptions<Logging, LoggingOptions> {
3838
private static final String DEFAULT_HOST = LoggingSettings.getDefaultEndpoint();
3939
private static final long serialVersionUID = 5753499510627426717L;
4040

41+
private Boolean autoPopulateMetadataOnWrite = null;
42+
4143
public static class DefaultLoggingFactory implements LoggingFactory {
4244
private static final LoggingFactory INSTANCE = new DefaultLoggingFactory();
4345

@@ -72,6 +74,8 @@ protected String getDefaultHost() {
7274

7375
public static class Builder extends ServiceOptions.Builder<Logging, LoggingOptions, Builder> {
7476

77+
private Boolean autoPopulateMetadataOnWrite = true;
78+
7579
private Builder() {}
7680

7781
private Builder(LoggingOptions options) {
@@ -87,6 +91,11 @@ public Builder setTransportOptions(TransportOptions transportOptions) {
8791
return super.setTransportOptions(transportOptions);
8892
}
8993

94+
public Builder setAutoPopulateMetadata(boolean autoPopulateMetadataOnWrite) {
95+
this.autoPopulateMetadataOnWrite = autoPopulateMetadataOnWrite;
96+
return this;
97+
}
98+
9099
@Override
91100
public LoggingOptions build() {
92101
return new LoggingOptions(this);
@@ -96,6 +105,7 @@ public LoggingOptions build() {
96105
@InternalApi("This class should only be extended within google-cloud-java")
97106
protected LoggingOptions(Builder builder) {
98107
super(LoggingFactory.class, LoggingRpcFactory.class, builder, new LoggingDefaults());
108+
this.autoPopulateMetadataOnWrite = builder.autoPopulateMetadataOnWrite;
99109
}
100110

101111
@SuppressWarnings("serial")
@@ -130,6 +140,10 @@ protected LoggingRpc getLoggingRpcV2() {
130140
return (LoggingRpc) getRpc();
131141
}
132142

143+
public Boolean getAutoPopulateMetadata() {
144+
return this.autoPopulateMetadataOnWrite;
145+
}
146+
133147
@Override
134148
public boolean equals(Object obj) {
135149
return obj instanceof LoggingOptions && baseEquals((LoggingOptions) obj);

google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingOptionsTest.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,31 @@
1616

1717
package com.google.cloud.logging;
1818

19+
import static org.easymock.EasyMock.createMock;
20+
import static org.junit.Assert.assertEquals;
21+
1922
import com.google.cloud.TransportOptions;
20-
import org.easymock.EasyMock;
21-
import org.junit.Assert;
2223
import org.junit.Test;
2324

2425
public class LoggingOptionsTest {
26+
private static final Boolean DONT_AUTO_POPULATE_METADATA = false;
27+
28+
@Test(expected = IllegalArgumentException.class)
29+
public void testNonGrpcTransportOptions() {
30+
TransportOptions invalidTransport = createMock(TransportOptions.class);
31+
LoggingOptions.newBuilder().setTransportOptions(invalidTransport);
32+
}
33+
34+
@Test
35+
public void testAutoPopulateMetadataOption() {
36+
LoggingOptions actual =
37+
LoggingOptions.newBuilder().setAutoPopulateMetadata(DONT_AUTO_POPULATE_METADATA).build();
38+
assertEquals(DONT_AUTO_POPULATE_METADATA, actual.getAutoPopulateMetadata());
39+
}
2540

2641
@Test
27-
public void testInvalidTransport() {
28-
try {
29-
LoggingOptions.newBuilder()
30-
.setTransportOptions(EasyMock.<TransportOptions>createMock(TransportOptions.class));
31-
Assert.fail();
32-
} catch (IllegalArgumentException expected) {
33-
Assert.assertNotNull(expected.getMessage());
34-
}
42+
public void testAutoPopulateMetadataDefaultOption() {
43+
LoggingOptions actual = LoggingOptions.getDefaultInstance();
44+
assertEquals(Boolean.TRUE, actual.getAutoPopulateMetadata());
3545
}
3646
}

google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public class LoggingTest {
4343
private static final String FOLDER_NAME = "folder";
4444
private static final String ORGANIZATION_NAME = "organization";
4545
private static final String BILLING_NAME = "billing";
46+
private static final Boolean DONT_AUTO_POPULATE_METADATA = false;
4647

4748
@Test
4849
public void testListOption() {
@@ -109,6 +110,10 @@ public void testWriteOption() {
109110
writeOption = WriteOption.resource(RESOURCE);
110111
assertEquals(RESOURCE, writeOption.getValue());
111112
assertEquals(WriteOption.OptionType.RESOURCE, writeOption.getOptionType());
113+
114+
writeOption = WriteOption.autoPopulateMetadata(DONT_AUTO_POPULATE_METADATA);
115+
assertEquals(DONT_AUTO_POPULATE_METADATA, writeOption.getValue());
116+
assertEquals(WriteOption.OptionType.AUTO_POPULATE_METADATA, writeOption.getOptionType());
112117
}
113118

114119
@Test

0 commit comments

Comments
 (0)