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ドキュメント