我有一个使用三个库的应用程序:
-
首先使用JBoss日志记录
-
秒使用Apache Commons的日志记录
-
third直接使用log4j2 API(如果它在类路径上)(如果不是log4j,则使用log4j)
并配置为将日志记录路由到log4j 1.2 .
我想切换到log4j2,因为性能问题 .
我从classpath中删除了log4j,并在那里添加了log4j2-1.2-bridge,log4j2-core和log4j2-api . 我已经通过-Dlog4j.configurationFile配置了日志记录,其配置类似于以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="foo" level="TRACE">
<AppenderRef ref="CONSOLE"/>
</Logger>
<Logger name="foo.bar" level="DEBUG">
<AppenderRef ref="CONSOLE"/>
</Logger>
<Logger name="xxx" level="TRACE">
<AppenderRef ref="CONSOLE"/>
</Logger>
<Root level="DEBUG">
<AppenderRef ref="CONSOLE"/>
</Root>
</Loggers>
</Configuration>
现在,我有几个问题:
-
来自Apache Commons日志记录的消息被记录两次
_999_由JBoss日志记录(通过注释创建的 Logger )发出的消息未根据配置进行格式化,而是使用默认的log4j2格式 . 但是,这些只写一次 . -
由一个特定类记录的JBoss日志记录中的非i18ed消息很少,但不是全部(这真的很奇怪)
-
来自直接使用log4j2 API的消息被记录两到三次
任何提示如何解决这些问题?
1 回答
所以我基本上犯了两个错误:
我没有发现log4j2日志记录中使用的可加性 - 每个 Logger 必须具有可加性= "false"(这可以在某种程度上全局设置吗?)
我的jboss-logging版本是3.1.2.GA,令人遗憾的是,log4j2的使用还没有修复(参见JBLOGGING-94) . 它仅在非发布版本3.1.4.GA中修复,因此我必须使用SNAPSHOT版本(并且无法在支持log4j2的情况下发布我的应用程序) .