開発者ドキュメント

Logback – ログファイル名をプログラムで設定する


Logback

では、プログラムによってログファイル名を簡単に設定できます。


  1. logback.xml`では、

    $ {log.name} `のような変数を宣言します.

  2. 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");

    }

}

参考文献


  1. Logback.xmlの例

  2. link://logging/logback-different-log-file-for-each-thread/[Logback –

各スレッドの異なるログファイル]。

Logback – MDCドキュメント

モバイルバージョンを終了