logback xml example
| Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。 下面就举例介绍一下如何在项目中使用logback: 1. Send logs to Console所有的日志都将会重定向到控制台. 
 <?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、Send logs to File所有的日志将会重定向到 
 <?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. Send logs to Console and File结合控制台与文件一起输出。 
 <?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 example把日志输出到分开的日志文件中,这个日志文件名称通过MDC在运行时定义. 
 <?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');
}可以查看完全的例子: Logback SiftingAppender example. 5、Set log file name programmatically以System.setProperty的方式以编程式的命名日志名称为${log.name}. 
 <?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>
 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------");
        //...
    }
}and Output: Debug log file path
/home/mkyong/ant/logs/abcdefg.log
Error log file path
/home/mkyong/ant/logs/abcdefg.error可以查看完全的例子: [Logback – Set log file name programmatically](Logback – Set log file name programmatically) 官方网站:http://logback.qos.ch/manual/introduction.html  (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
