我想在我的 JBoss 6.1 部署中使用 log4j 附加程序。由于我无法让它工作,我编写了一些测试代码并注意到 org.apache.log4j.Logger.getLogger(String) 正在返回一个 org.jboss.logmanager.log4j.BridgeLogger 类型的对象。
所以我想我有两个选择:(1)尝试让 getLogger 调用返回一个 apache log4j 类型而不是 JBoss BridgeLogger,或者(2)接受 JBoss 正在做某种桥接并让它使用 log4j appenders我已经写了我需要它来使用。
所以尝试第一个选项:Logger.getLogger() 委托给 LogManager.getLogger(String),它执行以下操作:
return getLoggerRepository().getLogger(String);
RepositorySelector 在 LogManager 中是静态的,设置如下:
Hierarchy h = new Hierarchy(new RootLogger((Level) Level.DEBUG));
repositorySelector = new DefaultRepositorySelector(h);
但是LogManager有一个setRepositorySelector,所以我得出的结论是JBoss启动过程中有东西在调用setRepositorySelector。因此,为了测试我从我的测试日志代码中调用了 setRepositorySelector(将其设置为 DefaultRepositorySelector 作为 LogManager 的静态初始化程序),然后检查返回的 Logger 类型 - 它仍然是 org.jboss.logmanager.log4j 类型。桥梁记录器!!
所以现在继续我的第二个选项:我想要的只是能够使用 log4j 附加程序 - deploy/jboss-logging.xml 文件有很多注释掉的 log4j 附加程序,所以我猜它们必须得到支持。因此,我按如下方式放入:
<log4j-appender name="MYTEMPFILE" class="org.apache.log4j.RollingFileAppender">
<error-manager>
<only-once/>
</error-manager>
<level name="DEBUG"/>
<properties>
<property name="file">${jboss.server.home.dir}/log/serverx.log</property>
<property name="maximumFileSize">20480000</property>
<property name="maxBackupIndex">5</property>
</properties>
<formatter>
<pattern-formatter pattern="%d %-5p [%c] (%t) %m%n"/>
</formatter>
</log4j-appender>
<!-- tried this too
<logger category="com.myco">
<level name="DEBUG"/>
<handlers>
<handler-ref name="MYTEMPFILE"/>
</handlers>
</logger>
-->
...
<root-logger>
<!-- Set the root logger priority via a system property, with a default value. -->
<level name="${jboss.server.log.threshold:DEBUG}"/>
<handlers>
<handler-ref name="MYTEMPFILE"/>
<handler-ref name="CONSOLE"/>
<handler-ref name="FILE"/>
</handlers>
</root-logger>
通过该更改,我不仅没有得到我的 serverx.log 文件,而且没有任何写入 server.log 的内容(没有上述更改的情况下填充了 server.log)。
我已经阅读了很多关于 jboss-deployment-structure.xml 并排除 log4j 依赖项的内容,但我对正在讨论的内容了解不够,无法知道它是否与我的问题相关。我怀疑这无关紧要。
我什至尝试部署这个听起来相关的补丁: https ://issues.jboss.org/browse/JBAS-8791 但没有区别。
任何人?
谢谢,保罗