From 15ea7f40cd7302b9bf9f0aea0d85a970a8a7c07f Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 9 Jan 2026 23:26:31 +0200 Subject: Add Log4j2 benchmark tool - Configurable thread count, duration, message size - Multiple logging configurations: sync-immediate, sync-buffered - AsyncLogger variants: 1k, 4k, 10k, 1m ring buffer sizes - AsyncAppender variants: 1k, 4k, 10k, 1m buffer sizes - Subprocess isolation for proper async logger initialization - Cache dropping between tests for accurate benchmarks - CSV output support --- src/main/java/bench/LogWorker.java | 51 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main/java/bench/LogWorker.java (limited to 'src/main/java/bench/LogWorker.java') diff --git a/src/main/java/bench/LogWorker.java b/src/main/java/bench/LogWorker.java new file mode 100644 index 0000000..5a9edfc --- /dev/null +++ b/src/main/java/bench/LogWorker.java @@ -0,0 +1,51 @@ +package bench; + +import org.apache.logging.log4j.Logger; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; + +public class LogWorker implements Runnable { + private final Logger logger; + private final String message; + private final CountDownLatch startLatch; + private final AtomicBoolean running; + private final AtomicLong eventCounter; + private final AtomicLong targetEvents; + private final BenchConfig.Mode mode; + + public LogWorker(Logger logger, String message, CountDownLatch startLatch, + AtomicBoolean running, AtomicLong eventCounter, + AtomicLong targetEvents, BenchConfig.Mode mode) { + this.logger = logger; + this.message = message; + this.startLatch = startLatch; + this.running = running; + this.eventCounter = eventCounter; + this.targetEvents = targetEvents; + this.mode = mode; + } + + @Override + public void run() { + try { + startLatch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + + if (mode == BenchConfig.Mode.DURATION) { + while (running.get()) { + logger.info(message); + eventCounter.incrementAndGet(); + } + } else { + while (running.get() && eventCounter.get() < targetEvents.get()) { + logger.info(message); + eventCounter.incrementAndGet(); + } + } + } +} -- cgit v1.2.3