LOG4J2-1179 MDCFilterBenchmark: changed scope to Benchmark, added state with Thread Scope to initialize ThreadContext map for all threads in the test
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/7c102f61 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/7c102f61 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/7c102f61 Branch: refs/heads/master Commit: 7c102f610fe9b72ecd86b916c15866c64dcdbd07 Parents: 5dbd1b6 Author: rpopma <[email protected]> Authored: Sun May 15 20:51:34 2016 +0900 Committer: rpopma <[email protected]> Committed: Sun May 15 20:51:34 2016 +0900 ---------------------------------------------------------------------- .../log4j/perf/jmh/MDCFilterBenchmark.java | 29 ++++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7c102f61/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java ---------------------------------------------------------------------- diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java index ae264ce..9b5c5cf 100644 --- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java +++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java @@ -38,22 +38,33 @@ import org.slf4j.MDC; // multiple threads (for example, 4 threads): // java -jar target/benchmarks.jar ".*MDCFilterBenchmark.*" -f 1 -i 5 -wi 5 -t 4 -si true -bm sample -tu ns -@State(Scope.Thread) +@State(Scope.Benchmark) public class MDCFilterBenchmark { + // Loggers are Benchmark scope, just like in a real application: + // different threads may use the same logger instance, which may have some lock contention. Logger log4jLogger; org.slf4j.Logger slf4jLogger; - Integer j; + + @State(Scope.Thread) + public static class ThreadContextState { + // Thread scope: initialize MDC/ThreadContext here to ensure each thread has some value set + public ThreadContextState() { + ThreadContext.put("user", "Apache"); + MDC.put("user", "Apache"); + } + + public String message() { + return "This is a test"; + } + } @Setup public void setUp() { System.setProperty("log4j.configurationFile", "log4j2-threadContextFilter-perf.xml"); System.setProperty("logback.configurationFile", "logback-mdcFilter-perf.xml"); - ThreadContext.put("user", "Apache"); - MDC.put("user", "Apache"); log4jLogger = LogManager.getLogger(MDCFilterBenchmark.class); slf4jLogger = LoggerFactory.getLogger(MDCFilterBenchmark.class); - j = Integer.valueOf(2); } @TearDown @@ -68,13 +79,13 @@ public class MDCFilterBenchmark { } @Benchmark - public void log4jThreadContextFilter() { - log4jLogger.info("This is a test"); + public void log4jThreadContextFilter(final ThreadContextState state) { + log4jLogger.info(state.message()); } @Benchmark - public void slf4jMDCFilter() { - slf4jLogger.info("This is a test"); + public void slf4jMDCFilter(final ThreadContextState state) { + slf4jLogger.info(state.message()); } }
