出力先
よくつかうのはこのパターン。
- アプリケーションのログは、DEBUG以上のログを標準出力へ出力する。*1
- アプリケーション以外のログは、INFO以上のログを標準出力へ出力する。
- INFO以上のログをファイルへ出力する。
- ERRORログは、INFOログとは別のファイルへ出力する。*2
*1 APサーバやライブラリのログをDEBUG出力すると膨大な量となり、アプリケーションのログが埋もれるので、INFOで出力する。
*2 人・監視ツールがエラー発生を検知しやすいように。
ファイル出力仕様
ファイルのローテーションは、「日付」か「ファイルサイズ」によるローテーションがあるが、日付だとファイルサイズが膨大となる可能性があるので、サイズによるローテーションを使用している。
- ファイルサイズ :10MB
- 保持期間 :10世代
- Encoding :UTF-8
log4j.xmlの設定
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- ============= Appender ============= -->
<!-- 標準出力用Appender -->
<appender name="Console_Appender" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="ImmediateFlush" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%t] %m%n" />
</layout>
</appender>
<!-- 処理ログ ファイル出力用Appender -->
<appender name=“Process_File_Appender” class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/var/log/app/info.log" />
<param name="MaxBackupIndex" value="10" />
<param name="MaxFileSize" value="10MB" />
<param name="Append" value="true" />
<param name="Encoding" value="UTF-8" />
<param name="Threshold" value=“INFO” />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MMM/dd HH:mm:ss.SSS} [%-5p] %m%n" />
</layout>
</appender>
<!-- エラーログ 用Appender -->
<appender name=“Error_File_Appender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/var/log/app/error.log" />
<param name="MaxBackupIndex" value="10" />
<param name="MaxFileSize" value="10MB" />
<param name="Append" value="true" />
<param name="Encoding" value="UTF-8" />
<param name="Threshold" value="ERROR" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MMM/dd HH:mm:ss.SSS} [%-5p] %m%n" />
</layout>
</appender>
<!-- ============= Logger ============= -->
<!-- root Logger
1. すべてのクラスのINFOログを標準出力へ出力する。
2. すべてのクラスのINFOログをファイルへ出力する。
3. すべてのクラスのERRORログをエラーファイルへ出力する。
-->
<root>
<level value="info"/>
<appender-ref ref="Console_Appender" />
<appender-ref ref="Process_File_Appender" />
<appender-ref ref="Error_File_Appender" />
</root>
<!-- アプリケーション Logger
アプリケーションのパッケージ配下のクラスは、DEBUG以上を標準出力へ出力する。(nameにはアプリケーションのルートパッケージを指定)
root Loggerの設定を引き継ぐため、additivity=trueにしておく
-->
<category name="jp.co.app” additivity=“true”>
<level value=“debug” />
<appender-ref ref=“Console_Appender“ />
</category>
</log4j:configuration>
たまに使う設定
特定のパッケージ(クラス)だけ、個別のファイルへ出力する
メール送信ログや他システムへのインタフェース処理ログなどは、確認しやすいように他の処理とは別のログへ出力する時がある。
logj.xml
<!-- メールログ出力用Appender -->
<appender name=“Mail_File_Appender” class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/var/log/app/sendMail.log" />
<param name="MaxBackupIndex" value="10" />
<param name="MaxFileSize" value="10MB" />
<param name="Append" value="true" />
<param name="Encoding" value="UTF-8" />
<param name="Threshold" value=“INFO” />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy/MMM/dd HH:mm:ss.SSS} [%-5p] %m%n" />
</layout>
</appender>
<!-- Send Mail Logger
メール出力パッケージを指定し、メールログ出力用Appenderを指定する。
-->
<category name=“jp.co.app.mail” additivity=“true”>
<level value=“info” />
<appender-ref ref="Mail_File_Appender" />
</category>