Skip to content

Commit cbe4740

Browse files
committed
add LoggingTracerFactory if logging is enabled
1 parent d21c838 commit cbe4740

File tree

5 files changed

+103
-16
lines changed

5 files changed

+103
-16
lines changed

sdk-platform-java/gax-java/gax/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@
139139
<configuration>
140140
<argLine>@{argLine} -Djava.util.logging.SimpleFormatter.format="%1$tY %1$tl:%1$tM:%1$tS.%1$tL %2$s %4$s: %5$s%6$s%n"</argLine>
141141
<!-- These tests require an Env Var to be set. Use -PenvVarTest to ONLY run these tests -->
142-
<test>!EndpointContextTest#endpointContextBuild_universeDomainEnvVarSet+endpointContextBuild_multipleUniverseDomainConfigurations_clientSettingsHasPriority,!LoggingEnabledTest,!LoggingTracerTest</test>
142+
<test>!EndpointContextTest#endpointContextBuild_universeDomainEnvVarSet+endpointContextBuild_multipleUniverseDomainConfigurations_clientSettingsHasPriority,!LoggingEnabledTest,!LoggingTracerTest,!ClientContextTest#testGetApiTracerFactory_loggingEnabled</test>
143143
</configuration>
144144
</plugin>
145145
</plugins>
@@ -154,7 +154,7 @@
154154
<groupId>org.apache.maven.plugins</groupId>
155155
<artifactId>maven-surefire-plugin</artifactId>
156156
<configuration>
157-
<test>EndpointContextTest#endpointContextBuild_universeDomainEnvVarSet+endpointContextBuild_multipleUniverseDomainConfigurations_clientSettingsHasPriority,LoggingEnabledTest,LoggingTracerTest</test>
157+
<test>EndpointContextTest#endpointContextBuild_universeDomainEnvVarSet+endpointContextBuild_multipleUniverseDomainConfigurations_clientSettingsHasPriority,LoggingEnabledTest,LoggingTracerTest, ClientContextTest#testGetApiTracerFactory_loggingEnabled</test>
158158
</configuration>
159159
</plugin>
160160
</plugins>

sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/logging/LoggingUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
@InternalApi
3737
public class LoggingUtils {
3838

39-
static final String GOOGLE_SDK_JAVA_LOGGING = "GOOGLE_SDK_JAVA_LOGGING";
39+
private static final String GOOGLE_SDK_JAVA_LOGGING = "GOOGLE_SDK_JAVA_LOGGING";
4040

4141
private static boolean loggingEnabled = checkLoggingEnabled(GOOGLE_SDK_JAVA_LOGGING);
4242

@@ -45,7 +45,7 @@ public class LoggingUtils {
4545
*
4646
* @return true if logging is enabled, false otherwise.
4747
*/
48-
static boolean isLoggingEnabled() {
48+
public static boolean isLoggingEnabled() {
4949
return loggingEnabled;
5050
}
5151

sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,13 @@
4040
import com.google.api.gax.core.BackgroundResource;
4141
import com.google.api.gax.core.ExecutorAsBackgroundResource;
4242
import com.google.api.gax.core.ExecutorProvider;
43+
import com.google.api.gax.logging.LoggingUtils;
4344
import com.google.api.gax.rpc.internal.QuotaProjectIdHidingCredentials;
4445
import com.google.api.gax.tracing.ApiTracerContext;
4546
import com.google.api.gax.tracing.ApiTracerFactory;
4647
import com.google.api.gax.tracing.BaseApiTracerFactory;
48+
import com.google.api.gax.tracing.CompositeTracerFactory;
49+
import com.google.api.gax.tracing.LoggingTracerFactory;
4750
import com.google.auth.ApiKeyCredentials;
4851
import com.google.auth.CredentialTypeForMetrics;
4952
import com.google.auth.Credentials;
@@ -271,16 +274,7 @@ public static ClientContext create(StubSettings settings) throws IOException {
271274
backgroundResources.add(watchdog);
272275
}
273276

274-
ApiTracerFactory apiTracerFactory = settings.getTracerFactory();
275-
if (apiTracerFactory.needsContext()) {
276-
ApiTracerContext apiTracerContext =
277-
ApiTracerContext.newBuilder()
278-
.setServerAddress(endpointContext.resolvedServerAddress())
279-
.setServerPort(endpointContext.resolvedServerPort())
280-
.setLibraryMetadata(settings.getLibraryMetadata())
281-
.build();
282-
apiTracerFactory = apiTracerFactory.withContext(apiTracerContext);
283-
}
277+
ApiTracerFactory apiTracerFactory = getApiTracerFactory(settings, endpointContext);
284278

285279
return newBuilder()
286280
.setBackgroundResources(backgroundResources.build())
@@ -301,6 +295,30 @@ public static ClientContext create(StubSettings settings) throws IOException {
301295
.build();
302296
}
303297

298+
@VisibleForTesting
299+
static ApiTracerFactory getApiTracerFactory(
300+
StubSettings settings, EndpointContext endpointContext) {
301+
ApiTracerFactory apiTracerFactory = settings.getTracerFactory();
302+
303+
if (LoggingUtils.isLoggingEnabled()) {
304+
apiTracerFactory =
305+
new CompositeTracerFactory(
306+
ImmutableList.of(new LoggingTracerFactory(), apiTracerFactory));
307+
}
308+
309+
if (apiTracerFactory.needsContext()) {
310+
ApiTracerContext apiTracerContext =
311+
ApiTracerContext.newBuilder()
312+
.setServerAddress(endpointContext.resolvedServerAddress())
313+
.setServerPort(endpointContext.resolvedServerPort())
314+
.setLibraryMetadata(settings.getLibraryMetadata())
315+
.build();
316+
apiTracerFactory = apiTracerFactory.withContext(apiTracerContext);
317+
}
318+
319+
return apiTracerFactory;
320+
}
321+
304322
/** Determines which credentials to use. API key overrides credentials provided by provider. */
305323
private static Credentials getCredentials(StubSettings settings) throws IOException {
306324
Credentials credentials;

sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import com.google.api.gax.rpc.testing.FakeStubSettings;
5555
import com.google.api.gax.rpc.testing.FakeTransportChannel;
5656
import com.google.api.gax.tracing.ApiTracerFactory;
57-
import com.google.api.gax.tracing.SpanTracerFactory;
5857
import com.google.auth.ApiKeyCredentials;
5958
import com.google.auth.CredentialTypeForMetrics;
6059
import com.google.auth.Credentials;
@@ -1297,7 +1296,7 @@ void testCreate_withTracerFactoryReturningNullWithContext() throws IOException {
12971296
builder.setCredentialsProvider(
12981297
FixedCredentialsProvider.create(Mockito.mock(Credentials.class)));
12991298

1300-
ApiTracerFactory apiTracerFactory = Mockito.mock(SpanTracerFactory.class);
1299+
ApiTracerFactory apiTracerFactory = Mockito.mock(ApiTracerFactory.class);
13011300
Mockito.doReturn(true).when(apiTracerFactory).needsContext();
13021301
Mockito.doReturn(apiTracerFactory).when(apiTracerFactory).withContext(Mockito.any());
13031302

@@ -1308,4 +1307,68 @@ void testCreate_withTracerFactoryReturningNullWithContext() throws IOException {
13081307
assertThat(context.getTracerFactory()).isSameInstanceAs(apiTracerFactory);
13091308
verify(apiTracerFactory, times(1)).withContext(Mockito.any());
13101309
}
1310+
1311+
@Test
1312+
void testGetApiTracerFactory_noContextNeeded() throws java.io.IOException {
1313+
ApiTracerFactory mockTracerFactory = Mockito.mock(ApiTracerFactory.class);
1314+
when(mockTracerFactory.needsContext()).thenReturn(false);
1315+
when(mockTracerFactory.withContext(
1316+
Mockito.any(com.google.api.gax.tracing.ApiTracerContext.class)))
1317+
.thenReturn(mockTracerFactory);
1318+
1319+
FakeStubSettings.Builder builder = FakeStubSettings.newBuilder();
1320+
builder.setTracerFactory(mockTracerFactory);
1321+
1322+
EndpointContext endpointContext = Mockito.mock(EndpointContext.class);
1323+
1324+
ApiTracerFactory apiTracerFactory =
1325+
ClientContext.getApiTracerFactory(builder.build(), endpointContext);
1326+
1327+
assertThat(apiTracerFactory).isSameInstanceAs(mockTracerFactory);
1328+
}
1329+
1330+
@Test
1331+
void testGetApiTracerFactory_contextNeeded() throws java.io.IOException {
1332+
ApiTracerFactory mockTracerFactory = Mockito.mock(ApiTracerFactory.class);
1333+
ApiTracerFactory withContextTracerFactory = Mockito.mock(ApiTracerFactory.class);
1334+
when(mockTracerFactory.needsContext()).thenReturn(true);
1335+
when(mockTracerFactory.withContext(
1336+
Mockito.any(com.google.api.gax.tracing.ApiTracerContext.class)))
1337+
.thenReturn(withContextTracerFactory);
1338+
1339+
FakeStubSettings.Builder builder = FakeStubSettings.newBuilder();
1340+
builder.setTracerFactory(mockTracerFactory);
1341+
1342+
EndpointContext endpointContext = Mockito.mock(EndpointContext.class);
1343+
when(endpointContext.resolvedServerAddress()).thenReturn("test-address");
1344+
when(endpointContext.resolvedServerPort()).thenReturn(443);
1345+
1346+
ApiTracerFactory apiTracerFactory =
1347+
ClientContext.getApiTracerFactory(builder.build(), endpointContext);
1348+
1349+
assertThat(apiTracerFactory).isSameInstanceAs(withContextTracerFactory);
1350+
verify(mockTracerFactory, times(1))
1351+
.withContext(Mockito.any(com.google.api.gax.tracing.ApiTracerContext.class));
1352+
}
1353+
1354+
// This test should only run when the maven profile `EnvVarTest` is enabled.
1355+
@Test
1356+
void testGetApiTracerFactory_loggingEnabled() throws java.io.IOException {
1357+
ApiTracerFactory mockTracerFactory = Mockito.mock(ApiTracerFactory.class);
1358+
when(mockTracerFactory.needsContext()).thenReturn(false);
1359+
when(mockTracerFactory.withContext(
1360+
Mockito.any(com.google.api.gax.tracing.ApiTracerContext.class)))
1361+
.thenReturn(mockTracerFactory);
1362+
1363+
FakeStubSettings.Builder builder = FakeStubSettings.newBuilder();
1364+
builder.setTracerFactory(mockTracerFactory);
1365+
1366+
EndpointContext endpointContext = Mockito.mock(EndpointContext.class);
1367+
1368+
ApiTracerFactory apiTracerFactory =
1369+
ClientContext.getApiTracerFactory(builder.build(), endpointContext);
1370+
1371+
assertThat(apiTracerFactory)
1372+
.isInstanceOf(com.google.api.gax.tracing.CompositeTracerFactory.class);
1373+
}
13111374
}

sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/testing/FakeStubSettings.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.api.core.InternalApi;
3333
import com.google.api.gax.core.GoogleCredentialsProvider;
3434
import com.google.api.gax.rpc.ClientContext;
35+
import com.google.api.gax.rpc.LibraryMetadata;
3536
import com.google.api.gax.rpc.StubSettings;
3637
import com.google.common.collect.ImmutableList;
3738
import java.io.IOException;
@@ -55,6 +56,11 @@ public String getServiceName() {
5556
return "test";
5657
}
5758

59+
@Override
60+
protected LibraryMetadata getLibraryMetadata() {
61+
return LibraryMetadata.newBuilder().build();
62+
}
63+
5864
@Override
5965
public StubSettings.Builder toBuilder() {
6066
return new Builder(this);

0 commit comments

Comments
 (0)