logback配置日誌

logback的詳細介紹網上有很多:http://blog.csdn.net/jibaole/article/details/52442694(參考文檔)

使用方法:

當我們分清了log4j,logback和slf4j的關係後,我們就可以使用它們了。這裏我們主要介紹logback和 slf4j的使用配置方法。

因爲logback和 slf4j的開發者是一樣的,所以logback很好的與slf4j兼容,下面在maven中導入了兩個jar包的引用,一個是logback,一個是slf4j的包,就可以開始記錄日誌了。

<!--日誌管理-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.15</version>
</dependency>

配置文件:

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

    <!-- 輸出規則 -->
    <property name="pattern" value="%d{yyyyMMdd:HH:mm:ss.SSS} [%-5level] [%thread] [%C:%L] %msg%n"/>
    <!--日誌輸出位置-->
    <property name="LOG_DIR" value="${APP_HOME}/logs"/>

    <!-- 控制檯輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>{LOG_DIR}/lk_ssm_dome%d{yyyy-MM-dd}.%i.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_DIR}/com_lk_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--文件最大爲10MB,最多爲30個,總的不超過20GB-->
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!-- 只記錄error級別,onMatch符合的接收,不符合略過-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 處理com.lk包下面的,additivity="false"不打印上級 -->
    <logger name="com.lk" additivity="false">
        <level value="info"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </logger>

    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

輸出的用法因爲使用slf4j的關係,都是一樣的。

public Result<Object> logTest() {
        log.debug("debug");
        log.info("info");
        log.warn("warm");
        log.error("error");
        log.trace("trace");
        return Result.success(null);
    }

日誌的格式

<!-- 輸出規則配置 -->
<property name="pattern" value="%d{yyyyMMdd:HH:mm:ss.SSS} [%-5level] [%thread] [%C:%L] %msg%n"/>

輸出日誌格式:

20170706:15:41:10.147 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info

並在後面的如果要使用配置規則,只要使用${pattern}就可以了。

日誌的級別和顯示:

日誌的級別劃分:
TRACE、DEBUG、INFO、WARN 和 ERROR
打印方法決定記錄請求的級別。例如,如果 L 是一個 logger 實例,那麼,語句 L.info(“..”)是一條級別爲 INFO的記錄語句。記錄請求的級別在高於或等於其 logger 的有效級別時被稱爲被啓用,否則,稱爲被禁用。記錄請求級別爲 p,其 logger的有效級別爲 q,只有則當 p>=q時,該請求才會被執行。
該規則是 logback 的核心。級別排序爲: TRACE < DEBUG < INFO < WARN < ERROR

節點是必須需要的節點,它的level的屬性代表了日誌的級別,例如當我們設置爲”info”時,控制檯只會顯示大於等於INFO的日誌:

20170706:15:41:10.147 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
20170706:15:41:10.148 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm
20170706:15:41:10.148 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error

當我們設置成trace時,控制檯會打印全部的日誌。

20170706:15:41:10.146 [DEBUG] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:34] debug
20170706:15:41:10.147 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
20170706:15:41:10.148 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm
20170706:15:41:10.148 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error
20170706:15:41:10.148 [TRACE] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:38] trace

appender標籤代表處理日誌的方法,我們在root中使用了STDOUT的appender,裏面只對日誌的格式做了格式的規定。名爲FILE的appender用file來記錄日誌。

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.out</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!--文件保存日誌 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${LOG_DIR}/com_lk_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_DIR}/com_lk_error_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--文件最大爲10MB,最多爲30個,總的不超過20GB-->
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!-- 只記錄error級別,onMatch符合的接收,onMismatch不符合略過-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

除此之外,我們可以使用log對不同的包的日誌做不同的處理,例如下面的設置,對該包下面的info日誌做處理,處理方式分別是FILE和STDOUT設置方式。

<!-- 處理com.yingjun包下面的,additivity="false"不打印上級 -->
    <logger name="com.yingjun" additivity="true">
        <level value="info"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </logger>

additivity設置爲false時,不打印上級日誌,也就是不打印中相同的日誌。當我們設置成true時,我們的日誌在時又會打印一遍。

20170706:16:29:27.706 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
20170706:16:29:27.706 [INFO ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:35] info
20170706:16:29:27.707 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm
20170706:16:29:27.707 [WARN ] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:36] warm
20170706:16:29:27.707 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error
20170706:16:29:27.707 [ERROR] [http-nio-8080-exec-5] [com.yingjun.ssm.api.GoodsController:37] error

參考:
http://blog.csdn.net/haidage/article/details/6794509/
http://blog.csdn.net/yingxiake/article/details/51274426

發佈了97 篇原創文章 · 獲贊 19 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章