JBoss 4.2.3中EAR与Log4j集成的日志问题咨询
JBoss 4.2.3 EAR日志问题解答
问题1:与JBoss共用server.log文件是否可行?
可行,但需注意配置方式以避免日志混乱:
- 不建议直接在应用的log4j配置中新建
FileAppender写入server.log,因为JBoss自身的log4j进程也在操作该文件,易出现内容交织、文件锁冲突(尤其是滚动日志时)。 - 最优方案是复用JBoss的log4j Appender:由于你关闭了java2ParentDelegation,应用类加载器无法直接读取JBoss的log4j配置,需在
jboss-app.xml的<class-loading>节点中,将log4j核心类(如org.apache.log4j.*)指定为父类加载器加载,这样应用的log4j就能复用JBoss已配置好的server.logAppender,无需重复配置文件输出。 - 若必须独立配置,确保应用的log4j Appender与JBoss的配置完全一致:比如使用相同的
RollingFileAppender、文件路径、滚动策略,且设置append=true,最大程度降低冲突概率。
问题2:日志出现重复前缀(如[STDOUT]和重复INFO标识)的原因
这是因为你的log4j输出被JBoss的System.out拦截器二次包装导致:
- 你的自定义Log4jConfigurator可能将日志输出到了System.out(比如配置了
ConsoleAppender并指向System.out),而JBoss默认会捕获所有System.out的输出,给每条内容加上[STDOUT]前缀,同时附加JBoss自身的日志级别标识(比如INFO)。 - 而你的log4j配置本身已在日志内容中输出了INFO标识,两者叠加就出现了重复的INFO和
[STDOUT]前缀。 - 解决方法:将log4j的输出目标从System.out改为直接写入文件(复用JBoss的Appender或独立配置正确的FileAppender),或在JBoss的配置中关闭对System.out的捕获(不推荐,会影响其他应用)。
补充说明:你最初log4j无输出的原因是关闭java2ParentDelegation后,应用类加载器无法加载JBoss全局的log4j配置,默认情况下log4j会使用极简的默认配置(不输出任何内容),因此需要手动初始化配置——这也是你自行实现Log4jConfigurator后日志能工作的原因,但配置细节处理不当导致了后续的前缀问题。
内容的提问来源于stack exchange,提问作者user2178964
相关产品推荐
相关产品推荐

