1. 程式人生 > >logback日誌框架(轉發)

logback日誌框架(轉發)

轉自:https://www.cnblogs.com/EasonJim/p/7800880.html

說明:內容估計有些舊,2011年的,但是大體意思應該沒多大變化,最新的配置可以參考官方文件。

一、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

POM:

複製程式碼
<!-- logback+slf4j -->  
<dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-api</artifactId>  
    <version>1.6.0</version>  
    <
type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>0.9.28</version> <type>jar</type> </dependency
> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>0.9.28</version> <type>jar</type> </dependency>
複製程式碼

二、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配置檔案在不同的環境下(開發,測試,生產)。而這些配置檔案僅僅只有一些很小的不同,可以通過 <if>,<then><else>標籤來實現,這樣一個配置檔案就可以適應多個環境。

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自動對自己進行配置,這會導致記錄輸出到控制檯。

3、Logback.xml檔案       

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑-->  
    <property name="LOG_HOME" value="c:/log" />  
    <!-- 控制檯輸出 -->   
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
       <!-- 日誌輸出編碼 -->  
       <Encoding>UTF-8</Encoding>   
        <layout class="ch.qos.logback.classic.PatternLayout">   
             <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
        </layout>   
    </appender>   
    <!-- 按照每天生成日誌檔案 -->   
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">   
        <Encoding>UTF-8</Encoding>   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名-->
            <FileNamePattern>${LOG_HOME}/myApp.log.%d{yyyy-MM-dd}.log</FileNamePattern>   
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>   
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
       </layout> 
        <!--日誌檔案最大的大小-->
       <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" />  
    
    <!-- 日誌輸出級別 -->
    <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

複製程式碼
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BlogAction{
     //定義一個全域性的記錄器,通過LoggerFactory獲取
     private static final Logger logger = LoggerFactory.getLogger(BlogAction.class); 
     /**
     * @param args
     */
    public static void main(String[] args) {
        logger.info("logback 成功了");
        logger.error("logback 成功了");
    }
}
複製程式碼

參考:


相關推薦

logback日誌框架轉發

轉自:https://www.cnblogs.com/EasonJim/p/7800880.html說明:內容估計有些舊,2011年的,但是大體意思應該沒多大變化,最新的配置可以參考官方文件。一、logback的介紹Logback是由log4j創始人設計的又一個開源日誌元件。

springboot2.x簡單詳細教程--整合Logback日誌框架第十一章

一、新日誌框架LogBack介紹     簡介:日誌介紹和新日誌框架Logback講解     1.常用處理java的日誌元件 slf4j,log4j,logback,common-logging 等    &

日誌框架--JDK Logging

前言    從jdk1.4起,JDK開始自帶一套日誌系統。JDK Logger最大的優點就是不需要任何類庫的支援,只要有Java的執行環境就可以使用。相對於其他的日誌框架,JDK自帶的日誌可謂是雞肋,無論易用性,功能還是擴充套件性都要稍遜一籌,所以在商業系統中很少直接使用。

Qt---log日誌框架2從效能考慮檔案操作

做了一個小的測試工具,可以檢視log,點選檢視log,會選擇系統預設的編輯器開啟log,同時就問了我一個問題,為什麼開啟log後,刪除檔案內的日誌,在產生的日誌就不能寫到日誌裡了?對於這個問題,是由於在寫入日誌的時候,只打開了一次log,對log做操作,破換了log,所以不

使用SpringBoot2.0搭建企業級應用開發框架配置LogBack日誌

前言 SpringBoot預設配置提供了對常用日誌的支援,如:Java Util Logging、Log4J、Log4J2和Logback,每種Logger都可以通過配置使用控制檯或者檔案輸出日誌內容 Logback是log4j框架的作者開發的新一代日誌框架,它效率更高、能夠適

JAVA 開發平臺的技術和框架日誌管理 :common-logging slf4j log4j logBack

common-logging common-logging是apache提供的一個通用的日誌介面。使用者可以自由選擇第三方的日誌元件作為具體實現,像log4j,或者jdk自帶的logging, common-logging會通過動態查詢的機制,在程式執行時自動找出真正使用

使用idea2017搭建SSM框架轉發:https://www.cnblogs.com/hackyo/p/6646051.html#!comments

繼續 logger 一個 裏的 itl ssi res pil string 步驟: 一、首先使用idea新建一個Maven webapp項目               點擊Finish,第一次搭建可能會很慢,甚至可能需要VPN才能搭建成功 二、搭建目錄結構

微服務框架十三Spring Boot Logstash日誌採集

  此係列文章將會描述Java框架Spring Boot、服務治理框架Dubbo、應用容器引擎Docker,及使用Spring Boot整合Dubbo、Mybatis等開源框架,其中穿插著Spring Boot中日誌切面等技術的實現,然後通過gitlab-CI以持續整合為Docker映

我的第一個python web開發框架40——後臺日誌與異常處理

1 #!/usr/bin/env python 2 # coding=utf-8 3 4 from bottle import put 5 from common import web_helper, encrypt_helper, security_helper 6

beego web框架日誌處理

1. 使用入門 beego 的日誌處理是基於 logs 模組搭建的,內建了一個變數 BeeLogger,預設已經是 logs.BeeLogger 型別,初始化了 console,也就是預設輸出到 console。 beego.Emergency("thi

Logback日誌配置分級別輸出到不同檔案

專案使用springboot2.0 springboot2.0基於jdk1.8,不相容1.7 springboot1.5.x基於jdk1.7,相容1.8 專案結構圖如下: logback配置檔名為logback-spring.xml 路徑需要寫在application.properties中,如下:

springboot中過濾器的使用logback-日誌記錄為例

過濾器和攔截器的區別,過濾器和攔截器的用途,面試經常被問到:https://blog.csdn.net/qq_36411874/article/details/53996873,這篇部落格寫的很詳細。 使用攔截器記錄日誌的案例:https://blog.csdn.net/qq_3128918

SpringBoot專案的logback日誌配置包括列印mybatis的sql語句

我在這就開門見山直接介紹我們專案日誌的配置使用吧!~ 1、基本介紹 預設情況下,Spring Boot專案就會用Logback來記錄日誌,並用INFO級別輸出到控制檯。如下圖: 實際開發中我們不需要直接新增logback日誌依賴。 你會

java日誌系統框架轉載

參考:(方便記錄,直接將內容貼過來了。如有侵權,請留言刪除,此致敬意!) 首先,在日誌系統的森林裡面理理頭緒,修煉內功。參考文章如下: 1.https://www.cnblogs.com/gavanwanggw/p/7305218.html 2.https://www.cnblogs.c

dubbo2.5-spring4-mybastis3.2-springmvc4-logback-ELK整合十三 logback+ELK日誌收集伺服器搭建

好久沒有更新部落格文章了,今天給大家帶來的是logback+ELK+SpringMVC 日誌收集伺服器搭建。接下來我會介紹ELK是什麼?logback是什麼?以及搭建的流程。 1.ELK是什麼? ELK是由Elasticsearch、Logstash、K

.net core中的那些常用的日誌框架Logging篇

### 前言 >日誌,在我們每個專案中是必不可少的,它不僅能在除錯的時候測試資料,而且在專案上線,也是我們排查錯誤的得力助手,那我就能談談,用的多的幾個日誌框架吧!如果有不對的地方,歡迎來指教錯誤,謝謝! ### Asp.Net Core日誌中Logging篇 >一看這個名字,大家也能猜到,這是微軟自帶的一

.net core中的那些常用的日誌框架NLog篇

### 前言 >咱們上回講到,.net core中內建的Logging日誌框架的使用,以及淺顯的講解,接下來,給大家介紹一個第三方日誌框架(NLog)。 ### NLog簡介 >NLog是適用於各種.NET平臺(包括.NET標準)的靈活,免費的日誌記錄平臺。NLog使寫入多個目標變得容易 。(資料庫,檔案,控

.net core中的那些常用的日誌框架Serilog篇

### 前言 >上文說到Nlog日誌框架,感覺它功能已經很強大,今天給大家介紹一個很不錯的日誌框架Serilog,根據我的瞭解,感覺它最大的優勢是,結構化日誌,它輸出的日誌是Json的格式,如果你使用的是Mongodb進行儲存日誌,那就是完美的結合,MongoDB也是文件式資料庫,儲存的格式很像JSON,也可

Struts2框架 Web.xml, Struts.xml, Action.Java 基本配置

str web.xml images ava img ima blog XML ges Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置

jdk源碼閱讀筆記之java集合框架LinkedList

ray private array public 源碼閱讀 jdk源碼閱讀 oid color 解釋 關於LinkedList的分析,會從且僅從其添加(add)方法入手。 因為上一篇已經分析過ArrayList,相似的地方就不再敘述,關註點在LinkedList的特點。 屬