【发布时间】:2017-12-25 18:59:25
【问题描述】:
我使用 log4j2 2.10.0 并且有以下代码:
SingleChronicleQueue q = SingleChronicleQueueBuilder.binary(args[0]).blockSize(536870912).build();
ExcerptAppender a = q.acquireAppender();
char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 1000; i++) {
char c = chars[random.nextInt(chars.length)];
sb.append(c);
}
String t = sb.toString();
for (int i = 0; i < 1000000; i ++ ) {
m_logger.info(i + " " + t);
a.writeText(t);
}
cq4 和日志都写入同一个目录。
在日志中,它一直很好,直到我能看到
12:40:00.853 - [main] INFO c.c.c.a.r.SandboxApp 601049
12:40:00.853 - [main] INFO c.c.c.a.r.SandboxApp 601050
12:40:00.853 - [main] INFO c.c.c.a.r.SandboxApp 601051
12:40:06.156 - [main] INFO c.c.c.a.r.SandboxApp 601052
有某种 IO 操作使它延迟了 6 秒。
我对磁盘、挂载等了解不够。如果我注释掉 writeText,这会消失,但我不知道这是编年史问题还是 log4j2。
我的log4j2参数是
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -DAsyncLogger.RingBufferSize=65536*65536 -DAsyncLogger.WaitStrategy=Sleep -Dlog4j2.AsyncQueueFullPolicy=Discard -Dlog4j2.DiscardThreshold=INFO
这是分析器显示的内容
谢谢!!
【问题讨论】: