1. 程式人生 > >logback配置

logback配置

logback

logback配置

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、Slf4j和Log4j之間的關系

Slf4j是The Simple Logging Facade for Java的簡稱,是一個簡單日誌門面抽象框架,它本身只提供了日誌Facade API和一個簡單的日誌類實現,一般常配合Log4j,LogBack,java.util.logging使用。Slf4j作為應用層的Log接入時,程序可以根據實際應用場景動態調整底層的日誌實現框架(Log4j/LogBack/JdkLog…)

LogBack和Log4j都是開源日記工具庫,LogBack是Log4j的改良版本,比Log4j擁有更多的特性,同時也帶來很大性能提升。

LogBack官方建議配合Slf4j使用,這樣可以靈活地替換底層日誌框架。

二、 LogBack的結構

LogBack被分為3個組件,logback-core, logback-classic 和 logback-access。

其中logback-core提供了LogBack的核心功能,是另外兩個組件的基礎。

logback-classic則實現了Slf4j的API,所以當想配合Slf4j使用時,需要將logback-classic加入classpath。

logback-access是為了集成Servlet環境而準備的,可提供HTTP-access的日誌接口。

三、LogBack配置

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<!--scan="true":配置文件若發生改變,會自動重新加載配置問價
    scanPeriod="60 seconds" :當scan為true時,此屬性生效。60 seconds表示每分鐘掃描配置文件看看是否有變化
    debug="false":若為true,將會打印logback內部的日誌信息   -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 定義四個全局變量 -->
    <!-- logback日誌級別(從小到大):TRACE<DEBAGE<INFO<WARN<ERROR -->
    <property name="log.level" value="debug"/> <!-- 日誌級別 -->
    <property name="log.maxHistory" value="30"/>  <!-- 最大的歷史保留時間,這裏為30天 -->
    <property name="log.filePath" value="${catalina.base}/logs/webapps"/> <!-- 日誌存儲的根路徑 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n"/>  <!-- 日誌展現的格式 -->
    <!-- %d{yyyy-MM-dd HH:mm:ss.SSS}:時間格式
         [%thread]:程序是由哪一個線程執行的
         %-5level:顯示日誌界別。-5表示縮進5位顯示
         %logger{50}-%msg:某一個類裏面輸出的相關信息
         %n:換行 -->

    <!-- 控制臺設置 -->
    <!--appender標簽:日誌輸出的位置配置  
        name="consoleAppender":名字
        class="ch.qos.logback.core.ConsoleAppender:引入類"
        -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder標簽指定輸出格式 -->
        <encoder>
            <pattern>${log.pattern}</pattern> <!-- log的輸出格式,按照上面的log.pattern格式輸出-->
        </encoder>
    </appender>

    <!-- debug -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file >${log.filePath}/debug.log</file><!-- 文件路徑,log.filePath是上面定義的路徑 -->
        <!-- 滾動策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 設置文件名稱 ,用絕對路徑-->
            <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>  <!-- 日誌最大保存歷史數量 -->
        </rollingPolicy>
        <!-- encoder標簽指定輸出格式 -->
        <encoder>
            <pattern>${log.pattern}</pattern><!-- log的輸出格式,按照上面的log.pattern格式輸出-->
        </encoder>
        <!-- 過濾器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level> <!-- 只記錄debug級別的日誌信息 -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch> <!-- 若不是debug級別日誌,則過濾掉 -->
        </filter>
    </appender>

    <!-- INFO -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file >${log.filePath}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory> 
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file >${log.filePath}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>  
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 
         name:指定掃描的包
         level:只記錄哪一個級別以上的日誌
         additivity="true":會把父類(下面的root標簽)中的內容包括進來,即也會在控制臺輸出-->
    <logger name="cn.qiuuuu" level="${log.level}" additivity="true">
        <!-- 與上面三個appender綁定 -->
        <appender-ref ref="debugAppender" />  
        <appender-ref ref="infoAppender" />
        <appender-ref ref="errorAppender" />
    </logger>

    <!--  -->
    <root level="info">
        <appender-ref ref="consoleAppender" /><!-- 與上面的appender綁定,控制臺輸出 -->
    </root>

</configuration>

logback配置