Skip to content

Commit

Permalink
test: add slf4j and logback config for tests (#2946)
Browse files Browse the repository at this point in the history
  • Loading branch information
BenWhitehead authored Feb 24, 2025
1 parent 9af146d commit 99d0f0c
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 0 deletions.
28 changes: 28 additions & 0 deletions google-cloud-storage/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,18 @@
<version>4.8.179</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>2.0.16</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.15</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down Expand Up @@ -386,6 +398,22 @@
-->
<dependency>io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi</dependency>
<dependency>io.opentelemetry.semconv:opentelemetry-semconv</dependency>
<!--
com.google.cloud.opentelemetry:exporter-metrics depends on slf4j
We are also using slf4j and logback in our test scope
list things out here to appease the dependency checker that gets confused like the following
[ERROR] Used undeclared dependencies found:
[ERROR] org.slf4j:slf4j-api:jar:2.0.16:compile
[ERROR] Unused declared dependencies found:
[ERROR] org.slf4j:jul-to-slf4j:jar:2.0.16:test
[ERROR] ch.qos.logback:logback-classic:jar:1.3.15:test
[ERROR] Non-test scoped test only dependencies found:
[ERROR] org.slf4j:slf4j-api:jar:2.0.16:compile
-->
<dependency>org.slf4j:slf4j-api</dependency>
<dependency>org.slf4j:jul-to-slf4j</dependency>
<dependency>ch.qos.logback:logback-classic</dependency>
</ignoredDependencies>
</configuration>
</plugin>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
import org.junit.runners.model.FrameworkField;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.TestClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Storage custom runner which will handle {@link CrossRun}, {@link SingleBackend}, {@link
Expand All @@ -53,6 +55,12 @@
* @see org.junit.runners.BlockJUnit4ClassRunner
*/
public final class StorageITRunner extends Suite {
static {
org.slf4j.bridge.SLF4JBridgeHandler.removeHandlersForRootLogger();
org.slf4j.bridge.SLF4JBridgeHandler.install();
}

private static final Logger LOGGER = LoggerFactory.getLogger(StorageITRunner.class);

private final Lock childrenLock = new ReentrantLock();
private volatile ImmutableList<Runner> filteredChildren = null;
Expand All @@ -67,6 +75,7 @@ public StorageITRunner(Class<?> klass) throws InitializationError {

@Override
public void run(RunNotifier notifier) {
LOGGER.debug("run(notifier : {})", notifier);
super.run(new RunNotifierUnion(notifier, Registry.getInstance()));
}

Expand Down
93 changes: 93 additions & 0 deletions google-cloud-storage/src/test/resources/logback.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<!--
~ Copyright 2025 Google LLC
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->

<configuration>
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %-5.5level [%-24.24thread] %-45.45logger{45} - %message%n</pattern>
</encoder>
</appender>
<appender name="NOEXCEPTION" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %-5.5level [%-24.24thread] %-45.45logger{45} - %message%nopex%n</pattern>
</encoder>
</appender>
<logger name="com.google.auth.oauth2.ComputeEngineCredentials" level="info"/>
<logger name="io.opencensus" level="info"/>
<logger name="io.grpc.ChannelLogger" level="info"/>
<!-- Context logs an exception when it's not able to find things, so suppress it's exception -->
<logger name="io.grpc.Context" level="info" additivity="false">
<appender-ref ref="NOEXCEPTION"/>
</logger>
<logger name="io.grpc.LoadBalancerRegistry" level="warn"/>
<logger name="io.grpc.NameResolverRegistry" level="warn"/>
<!--
GrpclbNameResolver logs an exception with several of it's messages that aren't
useful when you're only interested in the traffic
-->
<logger name="io.grpc.grpclb.GrpclbNameResolver" level="info" additivity="false">
<appender-ref ref="NOEXCEPTION"/>
</logger>
<logger name="io.grpc.ManagedChannelRegistry" level="info" additivity="false">
<appender-ref ref="NOEXCEPTION"/>
</logger>
<logger name="io.grpc.internal.ManagedChannelImplBuilder" level="info" additivity="false">
<appender-ref ref="NOEXCEPTION"/>
</logger>
<logger name="io.grpc.internal.AbstractManagedChannelImplBuilder" level="warn"/>
<logger name="io.grpc.internal.DnsNameResolver" level="warn"/>
<!--
netty initialization and event loop management appenders,
not necessarily what is desired when debugging requests
-->
<logger name="io.grpc.netty.shaded.io.grpc.netty" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.buffer" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.channel.DefaultChannelId" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.channel.MultithreadEventLoopGroup" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.handler.ssl" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.NetUtil" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.Recycler" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.ResourceLeakDetector" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.ResourceLeakDetectorFactory" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.internal.CleanerJava6" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.internal.InternalThreadLocalMap" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.internal.NativeLibraryLoader" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent" level="warn"/>
<logger name="io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent0" level="warn"/>
<logger name="io.perfmark.PerfMark" level="warn"/>
<!--
jdk11 appender which includes lots of details about ssl cypher suites
-->
<logger name="jdk.event.security" level="warn"/>
<!-- http request logging -->
<logger name="sun.net.www.protocol.http.HttpURLConnection" level="warn"/>
<logger name="com.google.api.client.http.HttpTransport" level="debug"/>
<logger name="com.google.cloud.storage.it.GrpcPlainRequestLoggingInterceptor" level="trace"/>
<!-- grpc netty traffic logging -->
<!--<logger name="io.grpc.netty.shaded.io.netty.handler.ssl.SslHandler" level="debug"/>-->
<!--<logger name="io.grpc.netty.shaded.io.grpc.netty.NettyClientHandler" level="debug"/>-->

<logger name="com.google.cloud.storage" level="info"/>
<logger name="com.google.cloud.storage.it" level="warn"/>

<root level="info">
<appender-ref ref="STDOUT"/>
</root>
</configuration>

0 comments on commit 99d0f0c

Please sign in to comment.