log4j.propertiesファイルの例
log4jチュートリアルでは、log4jのXMLベースの設定の使用方法を見ました。しかし、log4j.xmlは冗長なので、log4jフレームワークは設定をプロパティファイルからも読み取るオプションを提供しています。プロパティファイルには検証用の定義されたスキーマがないため、より注意が必要です。今日はXML設定をプロパティベースの設定に変換する方法を見ていきます。
ルートロガー
ルートロガーは、ロガーに一致しない場合に使用されます。XMLで以下のように定義されています。
<root>
<priority value="DEBUG" />
<appender-ref ref="file" />
<appender-ref ref="console" />
</root>
プロパティファイルでは以下のように定義できます。
log4j.rootLogger=DEBUG, file, console
カンマ区切りリストの最初の値はルートロギングレベルの値です。他のすべての値はアペンダーです。
Log4j アペンダー
log4jでは複数のアペンダーを持つことができます。以下は2つのアペンダーで、1つはコンソールログ用、もう1つはファイル用です。
<!-- console appender -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
</layout>
</appender>
<!-- rolling file appender -->
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/main.log" />
<param name="Append" value="true" />
<param name="ImmediateFlush" value="true" />
<param name="MaxFileSize" value="10MB" />
<param name="MaxBackupIndex" value="5" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" />
</layout>
</appender>
log4j.propertiesファイルでは、次のように定義されます。
#Define console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
logrj.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n
#Define rolling file appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/main.log
log4j.appender.file.Append=true
log4j.appender.file.ImmediateFlush=true
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n
したがって、log4jプロパティファイルのアペンダーの形式はlog4j.appender.{appender_name}.{appender_config}です。MaxFileSizeやMaxBackupIndexなどのアペンダーの設定は、XML設定ファイルと同じであることに注意してください。
Log4jロガー
アペンダーと同様に、複数のロガーを持つことができます。XMLベースの設定の例として;
<logger name="com.journaldev.log4j" additivity="false">
<level value="WARN" />
<appender-ref ref="file" />
<appender-ref ref="console" />
</logger>
<logger name="com.journaldev.log4j.logic" additivity="false">
<level value="DEBUG" />
<appender-ref ref="file" />
</logger>
それらはプロパティファイルでlog4j.logger.{logger_name}として定義されます。値にはログレベルと使用するアペンダーのリストが含まれています。
#Define loggers
log4j.logger.com.journaldev.log4j=WARN, file, console
log4j.logger.com.journaldev.log4j.logic=DEBUG, file, console
Log4j loggerの加算性
加算性の使用は、上記のロガーXML設定に示されています。これはロガー要素の属性です。以下は、log4jプロパティファイル設定での使用方法です: log4j.additivity.{logger_name}.
#setting additivity
log4j.additivity.com.journaldev.log4j=false
log4j.additivity.com.journaldev.log4j.logic=false
上記に基づいて、以下が私の最終的なlog4j.propertiesファイルです。
#Define root logger options
log4j.rootLogger=DEBUG, file, console
#Define console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
logrj.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n
#Define rolling file appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/main.log
log4j.appender.file.Append=true
log4j.appender.file.ImmediateFlush=true
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n
#Define loggers
log4j.logger.com.journaldev.log4j=WARN, file, console
log4j.logger.com.journaldev.log4j.logic=DEBUG, file, console
#setting additivity
log4j.additivity.com.journaldev.log4j=false
log4j.additivity.com.journaldev.log4j.logic=false
Log4j プロパティコンフィグレーター
PropertyConfiguratorは、log4jの設定を構成するために使用されます。ファイル名がlog4j.propertiesで、プロジェクトのクラスパスにある場合はオプションです。ロガーを使用する前に構成する必要があります。以下は、log4jロギングの構成と使用方法を示す簡単なプログラムです。
package com.journaldev.log4j.main;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import com.journaldev.log4j.logic.MathUtils;
public class Log4jExample {
static{
init();
}
private final static Logger logger = Logger.getLogger(Log4jExample.class);
public static void main(String[] args) {
logger.debug("My Debug Log");
logger.info("My Info Log");
logger.warn("My Warn Log");
logger.error("My error log");
logger.fatal("My fatal log");
}
/**
* method to init log4j configurations
*/
private static void init() {
PropertyConfigurator.configure("log4j.properties");
}
}
実行されると、コンソールログに以下が表示されます。
WARN Log4jExample - My Warn Log
ERROR Log4jExample - My error log
FATAL Log4jExample - My fatal log
同時に、以下のようにmain.logファイルにログが生成されるのが見えるでしょう。
2016-05-14 00:34:11,994 +0530 [main] WARN (Log4jExample.java:20) - My Warn Log
2016-05-14 00:34:11,995 +0530 [main] ERROR (Log4jExample.java:21) - My error log
2016-05-14 00:34:11,995 +0530 [main] FATAL (Log4jExample.java:22) - My fatal log
デバッグと情報のログが表示されていないのは、最小ログレベルがWARNに設定されているためです。これでlog4jプロパティファイルの使用例は終了です。楽しいログ記録を!
