gpt4 book ai didi

log4j - 在Log4J中,为什么ConversionPattern中的%C使用AsyncAppender打印 '?'(问号)?

转载 作者:行者123 更新时间:2023-12-04 03:59:47 24 4
gpt4 key购买 nike

在带有AsyncAppender的ConversionPattern中使用%C时遇到麻烦。

我的Lo4J配置是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss,SSS} %C{1} - %m%n" />
</layout>
</appender>
<appender name="async_console" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="1000" />
<appender-ref ref="console" />
</appender>
<root>
<level value="debug" />
<!--
<appender-ref ref="console" />
-->
<appender-ref ref="async_console" />
</root>
</log4j:configuration>

我的测试代码是:
@Test
public void testAsync() {
DOMConfigurator
.configure("src/test/resources/learningtest/log4j/log4j_test_async.xml");
Logger log = Logger.getLogger(getClass());
log.debug("Hello, world!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

测试代码的结果是:

2012/03/15 11:51:22,570 ? - Hello, world!



没有AsynAppender,它可以正常工作:

2012/03/15 11:51:06,002 Log4jTest - Hello, world!



使用%c(类别),它也可以正常工作。

我想念什么?

请告诉我。

提前致谢 :-)

引用:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

最佳答案

当使用“%C”或“%M”时,log4J使用Throwable.getStackTrace获取stackTrace并使用此信息获取调用方类和方法。
问题是,当使用AsyncAppender时,Throwable在另一个线程中创建,并且stackTrace不包含调用者方法。

关于log4j - 在Log4J中,为什么ConversionPattern中的%C使用AsyncAppender打印 '?'(问号)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com