LogBack配置使用全攻略

由於,筆者所在公司啓動新項目,原先使用的log4j筆者歷來沒關注過,實在是嫌麻煩,因而,本身琢磨了一天logback,算是成功了。特意來分享一下。web

logback須要這麼幾個jar包 
建議jar包能夠直接去maven的官方倉庫搜配置文件,而後收集了,爲了架構師作準備。spring

<!-- logback -->
        <dependency>
        <!--主要介紹的是這個jar包,這個包是負責logback隨着項目啓動的jar包-->
            <groupId>org.logback-extensions</groupId>
            <artifactId>logback-ext-spring</artifactId>
            <version>0.1.4</version>
        </dependency>
        <!--slf4j的jar包-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.6.4</version>
        </dependency>
        <!--logback的jar包-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.6</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-access</artifactId>
            <version>1.1.6</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.6</version>
        </dependency>

下面是web.xml文件的配置。api

<context-param>  
         <param-name>logbackConfigLocation</param-name>  
         <param-value>classpath:resource/logback.xml</param-value>  
</context-param>  
<listener>  
         <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  
</listener>

筆者的配置文件在resource下,就這麼寫了,你們能夠隨意指定。tomcat

下面就開始講xml配置文件

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

<configuration scan="true"><!-- 這個是根配置文件,必定要有的
                            scan:
                                是當配置文件被修改後會被從新加載
                            scanPeriod:
                                設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,
                                默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。
                            debug:
                                當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。
                                默認值爲false。
                             -->
    <!-- 日誌存放路徑 
        下面的標籤能夠本身定義
        name:至關於Map的key
        value:就是map的value
        ${catalina.base}是tomcat的當前路徑
        /logs:就是tomcat下的日誌路徑,
        /ehrlog:若是沒有目錄會默認建立
    -->
    <substitutionProperty name="logbase" value="${catalina.base}/logs/ehrLog/" />
    <!-- 時間戳:
            這個時間戳能夠做爲每日日誌的名稱 -->
    <timestamp key="bySecond" datePattern="yyyy-MM-dd"/>
    <!-- appender:
        name至關於一個名稱
        class:肯定要加載哪一個類
        encoder:必定要加 encoder ,
        默認配置爲PatternLayoutEncoder
        patter:必填
        ConsoleAppender:也明白是什麼意思,就是輸出在控制檯上-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] [%level] - %m%n
            </pattern>
        </encoder>
    </appender>
    <!-- 把日誌存儲 
        encoding:日誌的編碼
        file:指定當前生成的日誌文件名稱
        rollingPolicy:滾動策略
        FileNamePattern:移動文件最後的名稱,跟file標籤結合使用,
        好比file裏面的內容是  1.txt
        那麼,FileNamePattern裏面寫的是2.txt,那麼最後文件名就爲2.txt
        若是最後結尾是gz或者zip,那麼,就會自動打成壓縮包
        -->
    <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 編碼 -->
        <Encoding>UTF-8</Encoding>
        <!-- 按照時間來 -->
        <file>${logbase}ehr.${bySecond}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${logbase}ehr.${label}.%d{yyyy-MM-dd}.log.zip</FileNamePattern>
        </rollingPolicy>
        <!-- 佈局 -->
        <encoder>
             <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <append>false</append>

    </appender>
    <!-- logger:日誌單位
            name:是你當前掃描的哪一個包
            level:日誌的級別
            additivity:是否要把當前的日誌級別,給root根logger
            appender-ref:appender的引用
         -->
    <logger name="com.xxxx.controller" level="trace" additivity="true">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="logFile"/>
    </logger>
    <!-- 默認根節點是INFO級別的日誌 -->
    <!-- root:logger的根節點,就這一個,默認名稱就是root
        level:日誌級別
        appender-ref:肯定使用哪一個appender
         -->
    <root level="info">
        <appender-ref ref="fileAppender"/>
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

通常狀況下默認先去加載logger標籤裏面的內容,而後,根據additivity標籤的值來肯定是否須要向上級root傳遞日誌信息。架構

默認打包的功能沒有嘗試,不知道是否會天天0點自動打成壓縮包。app

相關文章
相關標籤/搜索