當使用多個配置文件時,我無法理解log4j的配置。log4j配置文件和繼承?
我解釋一下我的情況:
- 我有簡單的用模塊的Java EE應用程序(網絡,EJB,JPA)
- 我還自定義服務器的身份驗證模塊(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>
有了這個配置,我不希望看到的,因爲記錄com.sim
水平在我的應用程序INFO
或DEBUG
例如水平爲FATAL
,但我收到的所有日誌因爲它似乎應用了SAM log4j.xml的配置。事實上,當我刪除這個文件時,我收到了我的應用程序的日誌FATAL
。
似乎glassfish會「混合」或「合併」所有找到的log4j.xml文件。我不明白這個原則。
我只想用1個log4j.xml管理我的SAM,並用另一個獨立管理我的應用 log4j.xml。
我該怎麼做?
DOMConfigurator.configure添加
LogManager.resetConfiguration();
()是關鍵!解決問題 –如果您解決了您的問題,請添加並接受一個答案,以充分解釋將來會有類似問題的其他人的解決方案。 – Cephalopod