Logback – ログファイル名をプログラムで設定する
Logback
では、プログラムによってログファイル名を簡単に設定できます。
-
logback.xml`では、
$ {log.name} `のような変数を宣言します. -
Javaでは、変数を `System.setProperty(” log.name “、” abc “)で設定します.
1.完全な例
1.1ログバックファイル、後で `$ {log.name}`変数を設定します。
src/main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="PRO__HOME" value="/home/mkyong/ant/logs"/>
<property name="USER__HOME" value="${PRO__HOME}"/>
<timestamp key="bySecond" datePattern="yyyyMMdd.HHmmss"/>
<appender name="FILE-ENGINE-ERROR" class="ch.qos.logback.core.FileAppender">
<file>${USER__HOME}/${log.name}.error</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread]%-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE-ENGINE" class="ch.qos.logback.core.FileAppender">
<file>${USER__HOME}/${log.name}-${bySecond}.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss}[%thread]%-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.mkyong.core" level="debug" additivity="false">
<appender-ref ref="FILE-ENGINE"/>
</logger>
<logger name="org.springframework" level="error" additivity="false">
<appender-ref ref="FILE-ENGINE-ERROR"/>
</logger>
<root level="error">
<appender-ref ref="FILE-ENGINE-ERROR"/>
</root>
</configuration>
1.2 Javaでは、 `System.setProperty`でファイル名を設定するだけです。
AntRunApp.java
package com.mkyong.core;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AntRunApp {
private final Logger logger = LoggerFactory.getLogger(AntRunApp.class);
public static void main(String[]args) {
//Set this before the logger start.
System.setProperty("log.name", "mkyong");
AntRunApp obj = new AntRunApp();
obj.start();
}
private void start() {
logger.debug("------ Starting Ant------");
//...
}
}
出力
Debug log file path/home/mkyong/ant/logs/mkyong-20150323.221959.log Error log file path/home/mkyong/ant/logs/mkyong.error
2. log.name.rir
IS
UNDEFINED.log
一般的なエラーです。通常、 `static logger`によって発生します。例えば。
AntRunApp.java
package com.mkyong.core;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AntRunApp {
//static, this logger will be initialized before the program is run.
//All logs will be redirected to log.name.rir__IS__UNDEFINED.log
private static final Logger logger = LoggerFactory.getLogger(AntRunApp.class);
private void start() {
System.setProperty("log.name", "mkyong");
logger.debug("------ Starting Ant------");
//...
}
}
2.2
System.setProperty`の前にログすると、共通のLogback変数
UNDEFINED`エラーが発生します。
AntRunApp.java
package com.mkyong.core;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AntRunApp {
private final Logger logger = LoggerFactory.getLogger(AntRunApp.class);
private void start() {
//Please set the log name first!
logger.debug("------ Starting Ant------");
System.setProperty("log.name", "mkyong");
}
}
参考文献
-
link://logging/logback-different-log-file-for-each-thread/[Logback –
各スレッドの異なるログファイル]。
Logback – MDCドキュメント