ロガーの命名規則に従っている場合、これは Log4j で自動的に機能します。コードで、ロガーをクラス名で宣言します。
Logger logger = LogManager.getLogger(MyClass.class);
ロガーには自動的に名前が割り当てられますfully.qualified.class.name.of.MyClass
。これで、構成でこの完全修飾名(またはパッケージ名またはパッケージの最初の部分) を使用して、フィルタリングとルーティングを行うことができます。
フィルタリング
以下の例は、ロギングを実行するクラスのパッケージに基づいてログ イベントをフィルタリングする方法を示しています。パッケージ内のクラスによるすべてDEBUG
およびTRACE
レベルのログ イベントcom.other.company
は無視され、パッケージ内のクラスcom.another.project
のみERROR
およびFATAL
ロギングが含まれます。
<Configuration status="warn">
<Appenders>
<File name="MyFile" fileName="logs/my.log">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
</File>
</Appenders>
<Loggers>
<!-- drops all DEBUG and TRACE logging done by any class in this package -->
<Logger name="com.other.company" level="INFO" />
<!-- log only ERROR and FATAL logging by classes in this package -->
<Logger name="com.another.project" level="ERROR" />
<!-- by default, all log events are written to MyFile -->
<Root level="trace">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
ルーティング
以下の例は、ログ記録を行うクラスのパッケージに基づいて、ログ イベントを個別のログ ファイルにルーティングする方法を示していcom.other.company
ます。my.log
other.log
<Configuration status="warn">
<Appenders>
<File name="MyFile" fileName="logs/my.log">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
</File>
<File name="OtherFile" fileName="logs/other.log">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
</File>
</Appenders>
<Loggers>
<!-- all logging from this package and subpackages goes to OtherFile -->
<!-- Note: set additivity=false or logging will also go to the root logger -->
<Logger name="com.other.company" additivity="false">
<AppenderRef ref="OtherFile"/>
</Logger>
<Root level="trace">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>