【发布时间】:2012-12-03 11:00:45
【问题描述】:
当使用多个配置文件时,我很难理解 log4j 的配置。
我解释一下我的情况:
- 我有一个带有模块(web、ejb、jpa)的简单 Java EE 应用程序
- 我还有自定义服务器身份验证模块 (SAM) 来处理 Glassfish 的安全性,我不直接在我的应用程序中使用领域。
所以,我有 2 个 xml 配置文件,因为我的 SAM(JAR 文件)存储在 GF_HOME\glassfish\lib 中,而我的 EAR 文件存储在 GF_HOME\glassfish\domains\domain1 中。 JAR 和 EAR 都包含 log4j.xml 文件。
我的 log4j 库位于 GF_HOME\glassfish\domains\domain1\lib 目录中。
我想用 2 个 log4j.xml 文件来处理配置。
所以在我的 SAM 的 log4j.xml 文件中,我有这个:
<?xml version="1.0" encoding="UTF-8" ?>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${catalina.home}/logs/sim.log" />
<param name="Threshold" value="DEBUG" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="1MB" />
<param name="MaxBackupIndex" value="1" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %X{service} %X{user} [%c] %m%n" />
</layout>
</appender>
<root>
<priority value="DEBUG" />
<appender-ref ref="FILE" />
</root>
在我的应用程序中的 log4j.xml 中:
<?xml version="1.0" encoding="UTF-8" ?>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${catalina.home}/logs/sim.log"/>
<param name="Threshold" value="DEBUG"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="1MB"/>
<param name="MaxBackupIndex" value="1"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %X{service} %X{user} [%c] %m%n"/>
</layout>
</appender>
<logger name="com.sim" additivity="true">
<level value="FATAL" />
</logger>
<root>
<priority value="DEBUG" />
<appender-ref ref="FILE" />
</root>
使用此配置,我不希望在我的应用程序中看到 INFO 或 DEBUG 的示例级别,因为对于记录器 com.sim 级别是 FATAL 但我收到所有日志,因为它似乎应用了SAM log4j.xml。实际上,当我删除此文件时,我会收到我的应用程序级别为 FATAL 的日志。
glassfish 似乎“混合”或“合并”所有找到的 log4j.xml 文件。原理我不太明白。
我只想用 1 个 log4j.xml 管理我的 SAM,并用另一个 independant log4j.xml 管理我的应用程序。
我该怎么做?
【问题讨论】:
-
DOMConfigurator.configure() 是关键!问题解决了
-
如果您解决了您的问题,请添加并接受一个足以为将来有类似问题的其他人解释解决方案的答案。
标签: java configuration log4j