1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.perf.jmh;
18
19 import java.io.File;
20 import java.util.Arrays;
21 import java.util.concurrent.TimeUnit;
22
23 import org.apache.log4j.LogManager;
24 import org.apache.log4j.Logger;
25 import org.openjdk.jmh.annotations.BenchmarkMode;
26 import org.openjdk.jmh.annotations.GenerateMicroBenchmark;
27 import org.openjdk.jmh.annotations.Level;
28 import org.openjdk.jmh.annotations.Mode;
29 import org.openjdk.jmh.annotations.OutputTimeUnit;
30 import org.openjdk.jmh.annotations.Scope;
31 import org.openjdk.jmh.annotations.Setup;
32 import org.openjdk.jmh.annotations.State;
33 import org.openjdk.jmh.annotations.TearDown;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class Log4j1AsyncAppenderBenchmark {
50
51 final static char[] CHARS = new char[500];
52 static {
53 Arrays.fill(CHARS, 'a');
54 }
55 final static String TEST = new String(CHARS);
56
57 @State(Scope.Benchmark)
58 public static class NormalState {
59 Logger logger;
60
61 @Setup(Level.Trial)
62 public void up() {
63 System.setProperty("log4j.configuration", "perf-log4j12-async.xml");
64 logger = LogManager.getLogger(getClass());
65 }
66
67 @TearDown(Level.Trial)
68 public void down() {
69 LogManager.shutdown();
70 new File("perftest.log").delete();
71 }
72 }
73
74 @GenerateMicroBenchmark
75 @BenchmarkMode(Mode.Throughput)
76 @OutputTimeUnit(TimeUnit.SECONDS)
77 public boolean throughputBaseline(final NormalState e) {
78 return e.logger.isInfoEnabled();
79 }
80
81 @GenerateMicroBenchmark
82 @BenchmarkMode(Mode.Throughput)
83 @OutputTimeUnit(TimeUnit.SECONDS)
84 public void throughput(final NormalState e) {
85 e.logger.info(TEST);
86 }
87
88 @GenerateMicroBenchmark
89 @BenchmarkMode(Mode.SampleTime)
90 @OutputTimeUnit(TimeUnit.NANOSECONDS)
91 public boolean latencyBaseline(final NormalState e) {
92 return e.logger.isInfoEnabled();
93 }
94
95 @GenerateMicroBenchmark
96 @BenchmarkMode(Mode.SampleTime)
97 @OutputTimeUnit(TimeUnit.NANOSECONDS)
98 public void latency(final NormalState e) {
99 e.logger.info(TEST);
100 }
101 }