diff options
| author | Paul Buetow <paul@buetow.org> | 2026-01-09 23:26:31 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-01-09 23:26:31 +0200 |
| commit | 15ea7f40cd7302b9bf9f0aea0d85a970a8a7c07f (patch) | |
| tree | 897055fcb651cae1f5e96e14c966243325e95286 /src/main/java/bench/LogWorker.java | |
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
Diffstat (limited to 'src/main/java/bench/LogWorker.java')
| -rw-r--r-- | src/main/java/bench/LogWorker.java | 51 |
1 files changed, 51 insertions, 0 deletions
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(); + } + } + } +} |
