From fee6d942e8cb6ae7234c8c18ba80430893a50a11 Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Tue, 24 Mar 2020 13:43:13 -0400 Subject: [PATCH 1/2] Add okhttp request logging in tests --- .../trace/agent/test/utils/OkHttpUtils.java | 24 +++++++++++++++++++ dd-java-agent/testing/testing.gradle | 1 + 2 files changed, 25 insertions(+) diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/OkHttpUtils.java b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/OkHttpUtils.java index e78633ed2d..46ef589cba 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/OkHttpUtils.java +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/OkHttpUtils.java @@ -2,6 +2,10 @@ package datadog.trace.agent.test.utils; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; +import okhttp3.logging.HttpLoggingInterceptor.Level; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * This class was moved from groovy to java because groovy kept trying to introspect on the @@ -9,9 +13,29 @@ import okhttp3.OkHttpClient; */ public class OkHttpUtils { + private static final Logger CLIENT_LOGGER = LoggerFactory.getLogger("http-client"); + + static { + ((ch.qos.logback.classic.Logger) CLIENT_LOGGER).setLevel(ch.qos.logback.classic.Level.DEBUG); + } + + private static final HttpLoggingInterceptor LOGGING_INTERCEPTOR = + new HttpLoggingInterceptor( + new HttpLoggingInterceptor.Logger() { + @Override + public void log(final String message) { + CLIENT_LOGGER.debug(message); + } + }); + + static { + LOGGING_INTERCEPTOR.setLevel(Level.BASIC); + } + static OkHttpClient.Builder clientBuilder() { final TimeUnit unit = TimeUnit.MINUTES; return new OkHttpClient.Builder() + .addInterceptor(LOGGING_INTERCEPTOR) .connectTimeout(1, unit) .writeTimeout(1, unit) .readTimeout(1, unit); diff --git a/dd-java-agent/testing/testing.gradle b/dd-java-agent/testing/testing.gradle index 2d702c6aa4..ec45190746 100644 --- a/dd-java-agent/testing/testing.gradle +++ b/dd-java-agent/testing/testing.gradle @@ -22,6 +22,7 @@ dependencies { compile deps.guava compile group: 'org.eclipse.jetty', name: 'jetty-server', version: '8.0.0.v20110901' + compile group: 'com.squareup.okhttp3', name: 'logging-interceptor', version: versions.okhttp compile project(':dd-java-agent:agent-tooling') compile project(':utils:test-utils') From e5caa483642665e58cd01ce954b473c2ce463a55 Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Tue, 24 Mar 2020 14:51:26 -0400 Subject: [PATCH 2/2] Add netty server logging in tests --- .../src/latestDepTest/groovy/Netty38ServerTest.groovy | 11 ++++++++++- .../src/test/groovy/Netty38ServerTest.groovy | 11 ++++++++++- .../src/test/groovy/Netty40ServerTest.groovy | 6 +++++- .../src/test/groovy/Netty41ServerTest.groovy | 6 +++++- .../trace/agent/test/base/HttpServerTest.groovy | 8 ++++++++ 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/instrumentation/netty-3.8/src/latestDepTest/groovy/Netty38ServerTest.groovy b/dd-java-agent/instrumentation/netty-3.8/src/latestDepTest/groovy/Netty38ServerTest.groovy index a3c300699c..df2b5e050f 100644 --- a/dd-java-agent/instrumentation/netty-3.8/src/latestDepTest/groovy/Netty38ServerTest.groovy +++ b/dd-java-agent/instrumentation/netty-3.8/src/latestDepTest/groovy/Netty38ServerTest.groovy @@ -21,6 +21,8 @@ import org.jboss.netty.handler.codec.http.HttpResponseStatus import org.jboss.netty.handler.codec.http.HttpServerCodec import org.jboss.netty.handler.logging.LoggingHandler import org.jboss.netty.logging.InternalLogLevel +import org.jboss.netty.logging.InternalLoggerFactory +import org.jboss.netty.logging.Slf4JLoggerFactory import org.jboss.netty.util.CharsetUtil import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.ERROR @@ -37,8 +39,15 @@ import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1 class Netty38ServerTest extends HttpServerTest { + static final LoggingHandler LOGGING_HANDLER + static { + InternalLoggerFactory.setDefaultFactory(new Slf4JLoggerFactory()) + LOGGING_HANDLER = new LoggingHandler(SERVER_LOGGER.name, InternalLogLevel.DEBUG, true) + } + ChannelPipeline channelPipeline() { ChannelPipeline channelPipeline = new DefaultChannelPipeline() + channelPipeline.addFirst("logger", LOGGING_HANDLER) channelPipeline.addLast("http-codec", new HttpServerCodec()) channelPipeline.addLast("controller", new SimpleChannelHandler() { @@ -109,7 +118,7 @@ class Netty38ServerTest extends HttpServerTest { @Override ServerBootstrap startServer(int port) { ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory()) - bootstrap.setParentHandler(new LoggingHandler(InternalLogLevel.INFO)) + bootstrap.setParentHandler(LOGGING_HANDLER) bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Override ChannelPipeline getPipeline() throws Exception { diff --git a/dd-java-agent/instrumentation/netty-3.8/src/test/groovy/Netty38ServerTest.groovy b/dd-java-agent/instrumentation/netty-3.8/src/test/groovy/Netty38ServerTest.groovy index 7c1ba007e0..c08aa28a01 100644 --- a/dd-java-agent/instrumentation/netty-3.8/src/test/groovy/Netty38ServerTest.groovy +++ b/dd-java-agent/instrumentation/netty-3.8/src/test/groovy/Netty38ServerTest.groovy @@ -21,6 +21,8 @@ import org.jboss.netty.handler.codec.http.HttpResponseStatus import org.jboss.netty.handler.codec.http.HttpServerCodec import org.jboss.netty.handler.logging.LoggingHandler import org.jboss.netty.logging.InternalLogLevel +import org.jboss.netty.logging.InternalLoggerFactory +import org.jboss.netty.logging.Slf4JLoggerFactory import org.jboss.netty.util.CharsetUtil import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.ERROR @@ -37,8 +39,15 @@ import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1 class Netty38ServerTest extends HttpServerTest { + static final LoggingHandler LOGGING_HANDLER + static { + InternalLoggerFactory.setDefaultFactory(new Slf4JLoggerFactory()) + LOGGING_HANDLER = new LoggingHandler(SERVER_LOGGER.name, InternalLogLevel.DEBUG, true) + } + ChannelPipeline channelPipeline() { ChannelPipeline channelPipeline = new DefaultChannelPipeline() + channelPipeline.addFirst("logger", LOGGING_HANDLER) channelPipeline.addLast("http-codec", new HttpServerCodec()) channelPipeline.addLast("controller", new SimpleChannelHandler() { @@ -109,7 +118,7 @@ class Netty38ServerTest extends HttpServerTest { @Override ServerBootstrap startServer(int port) { ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory()) - bootstrap.setParentHandler(new LoggingHandler(InternalLogLevel.INFO)) + bootstrap.setParentHandler(LOGGING_HANDLER) bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Override ChannelPipeline getPipeline() throws Exception { diff --git a/dd-java-agent/instrumentation/netty-4.0/src/test/groovy/Netty40ServerTest.groovy b/dd-java-agent/instrumentation/netty-4.0/src/test/groovy/Netty40ServerTest.groovy index d7affb8e11..e97652e43f 100644 --- a/dd-java-agent/instrumentation/netty-4.0/src/test/groovy/Netty40ServerTest.groovy +++ b/dd-java-agent/instrumentation/netty-4.0/src/test/groovy/Netty40ServerTest.groovy @@ -34,16 +34,20 @@ import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1 class Netty40ServerTest extends HttpServerTest { + static final LoggingHandler LOGGING_HANDLER = new LoggingHandler(SERVER_LOGGER.name, LogLevel.DEBUG) + @Override EventLoopGroup startServer(int port) { def eventLoopGroup = new NioEventLoopGroup() ServerBootstrap bootstrap = new ServerBootstrap() .group(eventLoopGroup) - .handler(new LoggingHandler(LogLevel.INFO)) + .handler(LOGGING_HANDLER) .childHandler([ initChannel: { ch -> ChannelPipeline pipeline = ch.pipeline() + pipeline.addFirst("logger", LOGGING_HANDLER) + def handlers = [new HttpRequestDecoder(), new HttpResponseEncoder()] handlers.each { pipeline.addLast(it) } pipeline.addLast([ diff --git a/dd-java-agent/instrumentation/netty-4.1/src/test/groovy/Netty41ServerTest.groovy b/dd-java-agent/instrumentation/netty-4.1/src/test/groovy/Netty41ServerTest.groovy index d3dcf3d433..a91e779f28 100644 --- a/dd-java-agent/instrumentation/netty-4.1/src/test/groovy/Netty41ServerTest.groovy +++ b/dd-java-agent/instrumentation/netty-4.1/src/test/groovy/Netty41ServerTest.groovy @@ -33,16 +33,20 @@ import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1 class Netty41ServerTest extends HttpServerTest { + static final LoggingHandler LOGGING_HANDLER = new LoggingHandler(SERVER_LOGGER.name, LogLevel.DEBUG) + @Override EventLoopGroup startServer(int port) { def eventLoopGroup = new NioEventLoopGroup() ServerBootstrap bootstrap = new ServerBootstrap() .group(eventLoopGroup) - .handler(new LoggingHandler(LogLevel.INFO)) + .handler(LOGGING_HANDLER) .childHandler([ initChannel: { ch -> ChannelPipeline pipeline = ch.pipeline() + pipeline.addFirst("logger", LOGGING_HANDLER) + def handlers = [new HttpServerCodec()] handlers.each { pipeline.addLast(it) } pipeline.addLast([ diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy index 13f25c2c4c..16990954b1 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy @@ -1,5 +1,6 @@ package datadog.trace.agent.test.base +import ch.qos.logback.classic.Level import datadog.opentracing.DDSpan import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.asserts.ListWriterAssert @@ -15,6 +16,8 @@ import okhttp3.HttpUrl import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response +import org.slf4j.Logger +import org.slf4j.LoggerFactory import spock.lang.Shared import spock.lang.Unroll @@ -37,6 +40,11 @@ import static org.junit.Assume.assumeTrue @Unroll abstract class HttpServerTest extends AgentTestRunner { + public static final Logger SERVER_LOGGER = LoggerFactory.getLogger("http-server") + static { + ((ch.qos.logback.classic.Logger) SERVER_LOGGER).setLevel(Level.DEBUG) + } + @Shared SERVER server @Shared