logback.xmlの例
私のプロジェクトで使われている共有用の `logback.xml`の例をいくつか紹介します。
1.コンソールにログを送信する
すべてのロギングはコンソールにリダイレクトされます。
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}[%thread]%-5level %logger{36} - %msg%n </Pattern> </layout> </appender> <logger name="com.mkyong.web" level="debug" additivity="false"> <appender-ref ref="STDOUT"/> </logger> <root level="error"> <appender-ref ref="STDOUT"/> </root> </configuration>
2.ログをファイルに送る
すべてのロギングはファイル `c:/logs/debug.log`にリダイレクトされます。
さらに、このログファイルは毎日アーカイブされるか、ファイルサイズが10MBを超えます。
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="DEV__HOME" value="c:/logs"/> <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${DEV__HOME}/debug.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} - %msg%n </Pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>${DEV__HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log </fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender> <logger name="com.mkyong.web" level="debug" additivity="false"> <appender-ref ref="FILE-AUDIT"/> </logger> <root level="error"> <appender-ref ref="FILE-AUDIT"/> </root> </configuration>
3.コンソールとファイルにログを送る
最後の例では、両方を組み合わせてもう1つの “ファイルエラー”アペンダーを追加してエラーメッセージのみを記録します。
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="DEV__HOME" value="c:/logs"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{yyyy-MM-dd HH:mm:ss}[%thread]%-5level %logger{36} - %msg%n </Pattern> </layout> </appender> <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${DEV__HOME}/debug.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} - %msg%n </Pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>${DEV__HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log </fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender> <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${DEV__HOME}/error.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} - %msg%n </Pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>${DEV__HOME}/archived/error.%d{yyyy-MM-dd}.%i.log </fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender> <!-- Send logs to both console and file audit --> <logger name="com.mkyong.web" level="debug" additivity="false"> <appender-ref ref="FILE-AUDIT"/> <appender-ref ref="STDOUT"/> </logger> <root level="error"> <appender-ref ref="FILE-ERROR"/> </root> </configuration>
4. SiftingAppenderの例
ログを別のログファイルに送信します。ログファイル名は、実行時にMDCによって定義されます。
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="DEV__HOME" value="c:/logs"/> <appender name="FILE-THREAD" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator> <key>logFileName</key> <defaultValue>head0</defaultValue> </discriminator> <sift> <appender name="FILE-${logFileName}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${DEV__HOME}/${logFileName}.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss}[%thread]%level %logger{35} - %msg%n </Pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <FileNamePattern>${DEV__HOME}/${logFileName}.%i.log.zip </FileNamePattern> <MinIndex>1</MinIndex> <MaxIndex>10</MaxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> </sift> </appender> <logger name="com.mkyong.web" level="debug" additivity="false"> <appender-ref ref="FILE-THREAD"/> </logger> <root level="error"> <appender-ref ref="FILE-THREAD"/> </root> </configuration>
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; //... public void run() { MDC.put('logFileName', "head1"); logger.debug("hello"); MDC.remove('logFileName'); }
-
注意** この完全なリンク://logging/logback-different-log-file-for-each-thread/[Logback SiftingAppenderの例]を参照してください。
5.ログファイル名をプログラムで設定する
System.setProperty`を介してログファイル名
$ {log.name} ‘をプログラムで設定します。
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="USER__HOME" value="/home/mkyong/ant/logs"/> <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}.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> <root level="error"> <appender-ref ref="FILE-ENGINE-ERROR"/> </root> </configuration>
TestRunApp.java
package com.mkyong.core; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestRunApp { //No static, else log.name.IS__UNDEFINED.log private final Logger logger = LoggerFactory.getLogger(TestRunApp.class); public static void main(String[]args) { //Set this before the logger start. System.setProperty("log.name", "abcdefg"); TestRunApp obj = new TestRunApp(); obj.start(); } private void start() { logger.debug("------ Starting Ant------"); //... } }
出力
Debug log file path/home/mkyong/ant/logs/abcdefg.log Error log file path/home/mkyong/ant/logs/abcdefg.error
-
注意** この完全な例を参照してください:
Logback – プログラムでログファイル名を設定する