Javaと情熱のあいだ

カステラとドーナツと珈琲

LogbackとSLF4Jでログをローリングしつつ圧縮するサンプル

LogbackとSLF4Jを使用してログをローリングして出力されたファイルを圧縮する
サンプルです。
サンプルは分単位でローリングしてローリングされたファイルをZIPで圧縮します。
材料はこちら、
http://logback.qos.ch/
http://www.slf4j.org/


下記のライブラリを使用


logback-access-0.9.15.jar
logback-classic-0.9.15.jar
logback-core-0.9.15.jar
slf4j-api-1.5.8.jar


logback.xmlはsrcの直下に置く。


logback.xml

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} %-5level %class{0} %line : %msg%n</pattern>
        </layout>
    </appender>

    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} %-5level %class{0} %line : %msg%n</pattern>
        </layout>
        <File>sample.log</File>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>sample.%d{yyyy-MM-dd-HH-mm}.zip</FileNamePattern>
        </rollingPolicy>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>


LogWriteExample.java

public class LogWriteExample {

    final static Logger logger = LoggerFactory.getLogger(LogWriteExample.class);

    /**
     *
     * 実行。
     * @throws Exception
     */
    public void execute() throws Exception {

        for (int i = 0 ; i < 10000; i++) {

            logger.debug("DEBUG_TEST");

            logger.info("INFO TEST");

            logger.debug("テスト:{},{},{}", new String[]{"TEST", "TEST2", "TEST3"});
        }
    }
}

実行すると、分単位でログが圧縮されて出力されます。