-
log4jの取得
Javaでlog4jを利用します。
log4jも1.xと2.xでバージョンがありますが
2015年8月で1.xの開発は終わっており、
今は2.xの利用が推奨されています。log4j2.xの最新版は以下のサイトの(binary (zip))から入手します。
http://logging.apache.org/log4j/2.x/download.htmlzipファイルを解凍後、以下のjarをクラスパスに通します。
log4j-api-2.x.jarとlog4j-core-2.x.jar -
log4jの設定ファイル
log4j1.xではlog4j.propertiesだったようですが、
log4j2.xではlog4j.xmlを利用します。<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE project> <Configuration status="off"> <Properties> <Property name="format1">%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] [%p] [%c] %m%n</Property> <Property name="logfile">D:/test.log</Property> <Property name="logfile-archive">D:/test_%d{yyyy-MM-dd}-%i.log</Property> <!-- %dは日時。{}に日時の形式を指定 --> <!-- %tはスレッド名 --> <!-- %pはログレベル名(TRACE, ERROR) --> <!-- %cはロガーを生成したクラスフルパス --> <!-- %mはログメッセージ --> <!-- %nは改行 --> <!-- 出力イメージ 2017/06/25 14:54:20.068 [pool-1-thread-1] [TRACE] [thread.Log] 10:処理開始 2017/06/25 14:54:20.070 [pool-1-thread-1] [TRACE] [thread.Log] 10:処理終了 --> </Properties> <Appenders> <!-- コンソール出力設定 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout> <pattern>${format1}</pattern> </PatternLayout> </Console> <!-- ファイル出力設定 --> <RollingFile name="logfile001" append="true" fileName="${logfile}" filePattern="${logfile-archive}"> <PatternLayout> <pattern>${format1}</pattern> </PatternLayout> <Policies> <!-- 1KBを超えたらローテーション --> <SizeBasedTriggeringPolicy size="1KB"/> <!-- 日付でローテーション --> <TimeBasedTriggeringPolicy /> </Policies> <!-- ローテーションファイルの圧縮率や削除タイミング --> <DefaultRolloverStrategy max="3"/> </RollingFile> </Appenders> <Loggers> <!-- nameは任意の名前かパッケージ名(hoge.fuga.sample)を指定する --> <!-- 任意の名前の場合、JavaでLoggerを生成する際にコンストラクタで指定する --> <!-- additivityは上位のロガーにもログを出力するかどうか。デフォルトはtrue --> <Logger name="WEB" level="info" additivity="false"> <AppenderRef ref="logfile001" /> </Logger> <Root level="trace"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>
-
log4jの利用
package thread; public class Log { private Logger logger = null; private massage = ""; public Log() { logger = LogManager.getLogger(); } public void writeInfoLog(String message) { // messageIDを引数として、メッセージ内容を取得する方法が良い。 logger.trace(Thread.currentThread().getId() + ":" + message); } }
package thread; public class CallableTest implements Callable<Integer> { private Log logger = new Log(); private Log loggerWeb = new Log("WEB"); public Integer call() throws Exception { logger.writeInfoLog("ログ"); loggerWeb.writeInfoLog("ログ"); } }