Log4jでよく使う設定


#  出力先

よくつかうのはこのパターン。

- アプリケーションのログは、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>
```