日誌組件logback的介紹及配置使用方法

1、logback的介紹html

     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結合起來用兩個組件的官方網站以下:java

    logback的官方網站: http://logback.qos.chmysql

    SLF4J的官方網站:http://www.slf4j.orgsql

    本文章用到的組件以下:請自行到官方網站下載!數據庫

    logback-access-1.0.0.jarexpress

    logback-classic-1.0.0.jarapache

    logback-core-1.0.0.jarapi

    slf4j-api-1.6.0.jar安全

2、logback取代 log4j的理由:服務器

    Logback和log4j是很是類似的,若是你對log4j很熟悉,那對logback很快就會駕輕就熟。下面列了logback相對於log4j的一些優勢:

    一、更快的實現  Logback的內核重寫了,在一些關鍵執行路徑上性能提高10倍以上。並且logback不只性能提高了,初始化內存加載也更小了。

    二、很是充分的測試  Logback通過了幾年,數不清小時的測試。Logback的測試徹底不一樣級別的。在做者的觀點,這是簡單重要的緣由選擇logback而不是log4j。

    三、Logback-classic很是天然實現了SLF4j    Logback-classic實現了 SLF4j。在使用SLF4j中,你都感受不到logback-classic。並且由於logback-classic很是天然地實現了SLF4J,  所 以切換到log4j或者其餘,很是容易,只須要提供成另外一個jar包就OK,根本不須要去動那些經過SLF4JAPI實現的代碼。

    四、很是充分的文檔  官方網站有兩百多頁的文檔。

    五、自動從新加載配置文件  當配置文件修改了,Logback-classic能自動從新加載配置文件。掃描過程快且安全,它並不須要另外建立一個掃描線程。這個技術充分保證了應用程序能跑得很歡在JEE環境裏面。

    六、Lilith   Lilith是log事件的觀察者,和log4j的chainsaw相似。而lilith還能處理大數量的log數據 。

    七、謹慎的模式和很是友好的恢復  在謹慎模式下,多個FileAppender實例跑在多個JVM下,能 夠安全地寫道同一個日誌文件。RollingFileAppender會有些限制。Logback的FileAppender和它的子類包括 RollingFileAppender可以很是友好地從I/O異常中恢復。

    八、配置文件能夠處理不一樣的狀況   開發人員常常須要判斷不一樣的Logback配置文件在不一樣的環境下(開發,測試,生產)。而這些配置文件僅僅只有一些很小的不一樣,能夠經過,和來實現,這樣一個配置文件就能夠適應多個環境。

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

   十、SiftingAppender(一個很是多功能的Appender)  它能夠用來分割日誌文件根據任何一個給定的運行參數。如,SiftingAppender可以區別日誌事件跟進用戶的Session,而後每一個用戶會有一個日誌文件。

   十一、自動壓縮已經打出來的log  RollingFileAppender在產生新文件的時候,會自動壓縮已經打出來的日誌文件。壓縮是個異步過程,因此甚至對於大的日誌文件,在壓縮過程當中應用不會受任何影響。

   十二、堆棧樹帶有包版本  Logback在打出堆棧樹日誌時,會帶上包的數據。

   1三、自動去除舊的日誌文件  經過設置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory屬性,你能夠控制已經產生日誌文件的最大數量。若是設置maxHistory 12,那那些log文件超過12個月的都會被自動移除。

    總之,logback比log4j太優秀了,讓咱們的應用所有創建logback上吧 !

、Logback的配置介紹

    一、Logger、appender及layout

       Logger做爲日誌的記錄器,把它關聯到應用的對應的context上後,主要用於存放日誌對象,也能夠定義日誌類型、級別。

    Appender主要用於指定日誌輸出的目的地,目的地能夠是控制檯、文件、遠程套接字服務器、 MySQL、PostreSQL、 Oracle和其餘數據庫、 JMS和遠程UNIX Syslog守護進程等。 

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

     二、logger context

       各個logger 都被關聯到一個 LoggerContext,LoggerContext負責製造logger,也負責以樹結構排列各logger。其餘全部logger也經過org.slf4j.LoggerFactory 類的靜態方法getLogger取得。 getLogger方法以 logger名稱爲參數。用同一名字調用LoggerFactory.getLogger 方法所獲得的永遠都是同一個logger對象的引用。

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

      Logger 能夠被分配級別。級別包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定義於ch.qos.logback.classic.Level類。若是 logger沒有被分配級別,那麼它將從有被分配級別的最近的祖先那裏繼承級別。root logger 默認級別是 DEBUG。

   四、打印方法與基本的選擇規則

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

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

 

4、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。

     一、Logback的配置文件

      Logback 配置文件的語法很是靈活。正由於靈活,因此沒法用 DTD 或 XML schema 進行定義。儘管如此,能夠這樣描述配置文件的基本結構:以<configuration>開頭,後面有零個或多個<appender>元素,有零個或多個<logger>元素,有最多一個<root>元素。

     二、Logback默認配置的步驟

     (1). 嘗試在 classpath 下查找文件 logback-test.xml;

     (2). 若是文件不存在,則查找文件 logback.xml;

     (3). 若是兩個文件都不存在,logback 用 Bas icConfigurator 自動對本身進行配置,這會致使記錄輸出到控制檯。

    三、Logback.xml 文件 

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright 2010-2011 The myBatis Team
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
        http://www.apache.org/licenses/LICENSE-2.0
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<configuration debug="false">
    <!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->  
    <property name="LOG_HOME" value="/home" />  
    <!-- 控制檯輸出 -->   
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
             <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>   
        </encoder> 
    </appender>
    <!-- 按照天天生成日誌文件 -->   
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> 
            <!--日誌文件保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>   
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>   
        </encoder> 
        <!--日誌文件最大的大小-->
       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>10MB</MaxFileSize>
       </triggeringPolicy>
    </appender> 
   <!-- show parameters for hibernate sql 專爲 Hibernate 定製 --> 
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />  
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />  
    <logger name="org.hibernate.SQL" level="DEBUG" />  
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />  
    
    <!--myibatis log configure--> 
    <logger name="com.apache.ibatis" level="TRACE"/>
    <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="STDOUT" />
        <appender-ref ref="FILE" />
    </root> 
     <!--日誌異步到數據庫 -->  
    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <!--日誌異步到數據庫 --> 
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
           <!--鏈接池 --> 
           <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
              <driverClass>com.mysql.jdbc.Driver</driverClass>
              <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
              <user>root</user>
              <password>root</password>
            </dataSource>
        </connectionSource>
  </appender>
</configuration>

、在程序用引用Logback

package com.stu.system.action; 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BlogAction{
     //定義一個全局的記錄器,經過LoggerFactory獲取
     private final static Logger logger = LoggerFactory.getLogger(BlogAction.class); 
     /**
     * @param args
     */
    public static void main(String[] args) {
        logger.info("logback 成功了");
        logger.error("logback 成功了");
    }
}
相關文章
相關標籤/搜索