複数の設定ファイルが使用されている場合、log4j の設定を理解するのに苦労します。
私は私のケースを説明します:
- モジュール(web、ejb、jpa)を備えた単純なJava EEアプリがあります
- また、Glassfish でセキュリティを処理するためのカスタム サーバー認証モジュール (SAM) も持っています。アプリでレルムを直接使用することはありません。
したがって、SAM (JAR ファイル) が内部GF_HOME\glassfish\lib
に格納され、EAR ファイルが に格納されるため、2 つの xml 構成ファイルがあります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>
この構成では、ロガーレベルがSAM log4j.xml の構成を適用しているように見えるため、すべてのログを受信するため、アプリのレベルINFO
やレベルなどを確認することは期待できません。実際、このファイルを削除すると、レベル のアプリのログを受け取ります。DEBUG
com.sim
FATAL
FATAL
glassfish は、見つかったすべての log4j.xml ファイルを「ミックス」または「マージ」しているようです。原理がよくわかりません。
SAM を 1 つの log4j.xml で管理し、アプリを別の独立したlog4j.xmlで管理したいだけです。
これどうやってするの?