1. 程式人生 > >logback.xml常用配置

logback.xml常用配置

一、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結合起來用兩個元件的官方網站如下:

    本文章用到的元件如下:請自行到官方網站下載!

    logback-access-1.0.0.jar

    logback-classic-1.0.0.jar

    logback-core-1.0.0.jar

    slf4j-api-1.6.0.jar

二、logback取代 log4j的理由:

    Logback和log4j是非常相似的,如果你對log4j很熟悉,那對logback很快就會得心應手。下面列了logback相對於log4j的一些優點:

    1、更快的實現  Logback的核心重寫了,在一些關鍵執行路徑上效能提升10倍以上。而且logback不僅效能提升了,初始化記憶體載入也更小了。

    2、非常充分的測試  Logback經過了幾年,數不清小時的測試。Logback的測試完全不同級別的。在作者的觀點,這是簡單重要的原因選擇logback而不是log4j。

    3、Logback-classic非常自然實現了SLF4j    Logback-classic實現了 SLF4j。在使用SLF4j中,你都感覺不到logback-classic。而且因為logback-classic非常自然地實現了SLF4J,  所 以切換到log4j或者其他,非常容易,只需要提供成另一個jar包就OK,根本不需要去動那些通過SLF4JAPI實現的程式碼。

    4、非常充分的文件

  官方網站有兩百多頁的文件。

    5、自動重新載入配置檔案  當配置檔案修改了,Logback-classic能自動重新載入配置檔案。掃描過程快且安全,它並不需要另外建立一個掃描執行緒。這個技術充分保證了應用程式能跑得很歡在JEE環境裡面。

    6、Lilith   Lilith是log事件的觀察者,和log4j的chainsaw類似。而lilith還能處理大數量的log資料 。

    7、謹慎的模式和非常友好的恢復  在謹慎模式下,多個FileAppender例項跑在多個JVM下,能 夠安全地寫道同一個日誌檔案。RollingFileAppender會有些限制。Logback的FileAppender和它的子類包括 RollingFileAppender能夠非常友好地從I/O異常中恢復。

    8、配置檔案可以處理不同的情況   開發人員經常需要判斷不同的Logback配置檔案在不同的環境下(開發,測試,生產)。而這些配置檔案僅僅只有一些很小的不同,可以通過,和來實現,這樣一個配置檔案就可以適應多個環境。

    9、Filters(過濾器)  有些時候,需要診斷一個問題,需要打出日誌。在log4j,只有降低日誌級別,不過這樣會打出大量的日誌,會影響應用效能。在Logback,你可以繼續 保持那個日誌級別而除掉某種特殊情況,如alice這個使用者登入,她的日誌將打在DEBUG級別而其他使用者可以繼續打在WARN級別。要實現這個功能只需 加4行XML配置。可以參考MDCFIlter 。

   10、SiftingAppender(一個非常多功能的Appender)  它可以用來分割日誌檔案根據任何一個給定的執行引數。如,SiftingAppender能夠區別日誌事件跟進使用者的Session,然後每個使用者會有一個日誌檔案。

   11、自動壓縮已經打出來的log  RollingFileAppender在產生新檔案的時候,會自動壓縮已經打出來的日誌檔案。壓縮是個非同步過程,所以甚至對於大的日誌檔案,在壓縮過程中應用不會受任何影響。

   12、堆疊樹帶有包版本  Logback在打出堆疊樹日誌時,會帶上包的資料。

   13、自動去除舊的日誌檔案  通過設定TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory屬性,你可以控制已經產生日誌檔案的最大數量。如果設定maxHistory 12,那那些log檔案超過12個月的都會被自動移除。

    總之,logback比log4j太優秀了,讓我們的應用全部建立logback上吧 !

、Logback的配置介紹

    1、Logger、appender及layout

       Logger作為日誌的記錄器,把它關聯到應用的對應的context上後,主要用於存放日誌物件,也可以定義日誌型別、級別。

    Appender主要用於指定日誌輸出的目的地,目的地可以是控制檯、檔案、遠端套接字伺服器、 MySQL、PostreSQL、 Oracle和其他資料庫、 JMS和遠端UNIX Syslog守護程序等。 

    Layout 負責把事件轉換成字串,格式化的日誌資訊的輸出。

     2、logger context

       各個logger 都被關聯到一個 LoggerContext,LoggerContext負責製造logger,也負責以樹結構排列各logger。其他所有logger也通過org.slf4j.LoggerFactory 類的靜態方法getLogger取得。 getLogger方法以 logger名稱為引數。用同一名字呼叫LoggerFactory.getLogger 方法所得到的永遠都是同一個logger物件的引用。

   3、有效級別及級別的繼承

      Logger 可以被分配級別。級別包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定義於ch.qos.logback.classic.Level類。如果 logger沒有被分配級別,那麼它將從有被分配級別的最近的祖先那裡繼承級別。root logger 預設級別是 DEBUG。

   4、列印方法與基本的選擇規則

列印方法決定記錄請求的級別。例如,如果 L 是一個 logger 例項,那麼,語句 L.info("..")是一條級別為 INFO的記錄語句。記錄請求的級別在高於或等於其 logger 的有效級別時被稱為被啟用,否則,稱為被禁用。記錄請求級別為 p,其 logger的有效級別為 q,只有則當 p>=q時,該請求才會被執行。

    該規則是 logback 的核心。級別排序為: TRACE < DEBUG < INFO < WARN < ERROR

四、Logback的預設配置

      如果配置檔案 logback-test.xml 和 logback.xml 都不存在,那麼 logback 預設地會呼叫BasicConfigurator ,建立一個最小化配置。最小化配置由一個關聯到根 logger 的ConsoleAppender 組成。輸出用模式為%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的 PatternLayoutEncoder 進行格式化。root logger 預設級別是 DEBUG。

     1、Logback的配置檔案

      Logback 配置檔案的語法非常靈活。正因為靈活,所以無法用 DTD 或 XML schema 進行定義。儘管如此,可以這樣描述配置檔案的基本結構:以<configuration>開頭,後面有零個或多個<appender>元素,有零個或多個<logger>元素,有最多一個<root>元素。

     2、Logback預設配置的步驟

    (1). 嘗試在 classpath 下查詢檔案 logback-test.xml;

     (2). 如果檔案不存在,則查詢檔案 logback.xml;

     (3). 如果兩個檔案都不存在,logback 用 Bas icConfigurator 自動對自己進行配置,這會導致記錄輸出到控制檯

以下為詳細程式碼

<?xml version="1.0" encoding="UTF-8"?>
<!-- 說明: 1、日誌級別及檔案 日誌記錄採用分級記錄,級別與日誌檔名相對應,不同級別的日誌資訊記錄到不同的日誌檔案中 例如:error級別記錄到log_error_xxx.log或log_error.log(該檔案為當前記錄的日誌檔案),而log_error_xxx.log為歸檔日誌, 
    日誌檔案按日期記錄,同一天內,若日誌檔案大小等於或大於2M,則按0、1、2...順序分別命名 例如log-level-2013-12-21.0.log 
    其它級別的日誌也是如此。 2、檔案路徑 若開發、測試用,在Eclipse中執行專案,則到Eclipse的安裝路徑查詢logs資料夾,以相對路徑../logs。 
    若部署到Tomcat下,則在Tomcat下的logs檔案中 3、Appender FILEERROR對應error級別,檔名以log-error-xxx.log形式命名 
    FILEWARN對應warn級別,檔名以log-warn-xxx.log形式命名 FILEINFO對應info級別,檔名以log-info-xxx.log形式命名 
    FILEDEBUG對應debug級別,檔名以log-debug-xxx.log形式命名 stdout將日誌資訊輸出到控制上,為方便開發測試使用 -->
<configuration>

    <!-- 在Eclipse中執行,請到Eclipse的安裝目錄中找log檔案,Tomcat下,請到Tomcat目錄下找 -->
    <!-- <property name="LOG_PATH" value="/xebest/logs/llmj-app" /> -->
    <property name="LOG_PATH" value="E:/logs/llmj-app" />
    <!-- 日誌記錄器,日期滾動記錄 -->
    <appender name="FILEERROR"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌檔案的路徑及檔名 -->
        <file>${LOG_PATH}/log_error.log</file>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔的日誌檔案的路徑,例如今天是2013-12-21日誌,當前寫的日誌檔案路徑為file節點指定,可以將此檔案與file指定檔案路徑設定為不同路徑,從而將當前日誌檔案或歸檔日誌檔案置不同的目錄。 
                而2013-12-21的日誌檔案在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/log-error-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <!-- 除按日誌記錄之外,還配置了日誌檔案不能超過2M,若超過2M,日誌檔案會以索引0開始, 命名日誌檔案,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式記錄日誌 -->
        <append>true</append>
        <!-- 日誌檔案的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%-5p [%d][%mdc{mdc_userId}] %C:%L - %m %n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌檔案只記錄error級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="FILEWARN"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/log_warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/log-warn-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%-5p [%d][%mdc{mdc_userId}] %C:%L - %m %n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌檔案只記錄warn級別,不記錄大於warn級別的日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="FILEINFO"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/log_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/log-info-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%-5p [%d][%mdc{mdc_userId}] %C:%L - %m %n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌檔案只記錄info級別,不記錄大於info級別的日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <appender name="FILEDEBUG"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/log_debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/log-debug-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%-5p [%d][%mdc{mdc_userId}] %C:%L - %m %n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌檔案只記錄debug級別,不記錄大於debug級別的日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <encoder>
            <pattern>%-5p [%d][%mdc{mdc_userId}] %C:%L - %m %n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日誌appender是為開發使用,只配置最底級別,控制檯輸出的日誌級別是大於或等於此級別的日誌資訊 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>

    <appender name="FILTER_INFO"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/log_filter.log</File>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} : %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>${LOG_PATH}/log_filter.%d{yyyy-MM-dd}</fileNamePattern>  
        </rollingPolicy>  
    </appender>
    
     <logger name="FILTER_INFO_LOGGER" additivity="false" level="INFO"> 
         <appender-ref ref="FILTER_INFO" /> 
     </logger>


    <appender name="INTEREST_BEARING_INFO"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/log_interest_bearing.log</File>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} : %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>${LOG_PATH}/log_interest_bearing.%d{yyyy-MM-dd}</fileNamePattern>  
        </rollingPolicy>  
    </appender>
    
     <logger name="INTEREST_BEARING_LOGGER" additivity="true" level="INFO"> 
         <appender-ref ref="INTEREST_BEARING_INFO" /> 
     </logger>


    <!-- 為單獨的包配置日誌級別,若root的級別大於此級別, 此處級別也會輸出 應用場景:生產環境一般不會將日誌級別設定為trace或debug,但是為詳細的記錄SQL語句的情況, 
        可將hibernate的級別設定為debug,如此一來,日誌檔案中就會出現hibernate的debug級別日誌, 而其它包則會按root的級別輸出日誌 -->
    <logger name="org.springframework" level="DEBUG" />
    <logger name="com.ibatis" level="DEBUG" />  
    <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />  
    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />  
    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" />  
    <logger name="java.sql.Connection" level="DEBUG" />  
    <logger name="java.sql.Statement" level="DEBUG" />  
    <logger name="java.sql.PreparedStatement" level="DEBUG" />  


    <!-- 生產環境,將此級別配置為適合的級別,以名日誌檔案太多或影響程式效能 -->
    <root level="INFO">
        <appender-ref ref="FILEDEBUG" />
        <appender-ref ref="FILEINFO" />
        <appender-ref ref="FILEWARN" />
        <appender-ref ref="FILEERROR" />
        <!-- 生產環境將請stdout去掉 -->
         <appender-ref ref="stdout" /> 
    </root>
</configuration>

相關推薦

logback logback.xml常用配置詳解(一)<configuration> and <logger>

配置文件 cti 原創文章 分類 lis ali 配置 默認值 原創 摘自:http://aub.iteye.com/blog/1101260logback logback.xml常用配置詳解(一)<configuration> and <logger&

logback logback.xml常用配置詳解(一) and

部落格分類:  Log 詳細整理了logback常用配置, 不是官網手冊的翻譯版,而是使用總結,旨在更快更透徹的理解其配置 logback 中文手冊 (官網手冊的翻譯版,在這裡向中文版譯者-陳華,說聲辛苦啦) logback 配置詳解(

logback logback.xml常用配置詳解(二)

logback 常用配置詳解(二) <appender> <appender>: <appender>是<configuration>的子節點,是負責寫日誌的元件。 <appender>有兩個必要屬

logback.xml常用配置

一、logback的介紹      Logback是由log4j創始人設計的又一個開源日誌元件。logback當前分成三個模組:logback-core,logback- classic和logback-access。logback-core是其它兩個模組的基礎模組。logback-classic是log4

logback logback.xml常用配置詳解(三)

  logback 常用配置詳解(三)<filter> <filter>: 過濾器,執行一個過濾器會有返回個列舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日誌將立即被拋棄不再經過其他過濾器;返回NEUTRAL,有序列

為什麽Spring Boot推薦使用logback-spring.xml來替代logback.xml配置logback日誌的問題分析

ring ack 解決 為什麽 5.7 net feature release href 最根本的原因: 即,logback.xml加載早於application.properties,所以如果你在logback.xml使用了變量時,而恰好這個變量是寫在applica

web.xml 常用配置——持續更新

頁面歡迎頁設定 <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <welcome-file-list> <

maven中pom.xml常用配置

pom.xml 該檔案用於管理:原始碼、配置檔案、開發者的資訊和角色、問題追蹤系統、組織資訊、專案授權、專案的url、專案的依賴關係等等。 1.1 基本內容 1.1.1 modelVersion 寫明pom版本,一般都是4.0.0 1.1.2

logback.xml通用配置模板

<?xml version="1.0" encoding="UTF-8"?> <!-- Copyright 2010-2011 The myBatis Team Licensed under the Apache License, V

springboot中logback日誌常用配置,包含日誌切割

新增依賴: <!--監控--> <dependency> <groupId>org.springframework.boot</groupId>

第10步 (1)logback.xml日誌配置(2) ftp(上傳檔案)伺服器配置(3) idea注入和自動編譯配置(4)專案提交gitee(5)fe助手和restlet client

****************************************************************************************************************************************** 1.直接複製&

為什麼Spring Boot推薦使用logback-spring.xml來替代logback.xml配置logback日誌的問題分析

最根本的原因: 即,logback.xml載入早於application.properties,所以如果你在logback.xml使用了變數時,而恰好這個變數是寫在application.properties時,那麼就會獲取不到,只要改成logback-spring.xml就可以解決。

如何在Hibernate log中顯示所執行的sql的引數值 (以logback.xml配置為例子)

因為Hibernate使用slf4j框架 (slf4j + logback)記錄日誌, 所以這裡以 logback.xml 作為例子,具體配置直接看例子: <?xml version="1.0" encoding="UTF-8"?> <configura

常用logback.xml配置詳解

選擇logback的理由 ==logback==與==log4j==的簡單對比一下: 1.首先,對於同樣的程式碼路徑,==logback==使用起來更快。 2.==logback==原生實現了log4j的api,而log4j中間還需要一個轉換層。 3.有更豐富的文件,支援xml的和group的配置。 4.對配

常用配置】Spring框架web.xml通用配置

name star spring config ini param lis 框架 -name <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun

SpringBoot application.yml logback.xml,多環境配置,支持 java -jar --spring.profiles.active

ole att code nio nec 支持 啟動 level -s 趁今天有時間整理了一下 啟動命令為 //開發環境 java -jar app.jar --spring.profiles.active=dev--server.port=8060 //測

logback.xml配置

warn eve ger ons gpo sbc ring -i logback 生成info,warn,error級別日誌文件,保存60天,如果文件大於10MB新建日誌文件,後綴0,1,2,3來標識。自定義控制臺輸出內容顏色。 <?xml version="1.0"

logback使用與配置檔案logback.xml詳解

一、logback簡介 Logback由log4j創始人設計的另一個開源日誌元件,官網:http://logback.qos.ch。它當前分為下面三模組: logback-core:其它兩個模組的基礎模組 logback-classic:它是log4

java 日誌 logback-spring.xml 檔案配置

  maven配置: <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <versi

logback 常用配置詳解(三)

logback 常用配置詳解(三) <filter> <filter>: 過濾器,執行一個過濾器會有返回個列舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日誌將立即被拋棄不再經過其他過濾器;返回NEUTRAL,有序列