天天看點

日志輸出架構log4j概念

此概念源自極客之家:日志輸出架構log4j使用

一、Log4j日志介紹

Log4j是Apache的一個開源項目,使用Log4j進行日志操作,我們可以控制日志資訊輸送的目的地是控制台、檔案等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志資訊的級别,我們能夠更加細緻地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置檔案來靈活地進行配置,而不需要修改應用的代碼。

此外,通過Log4j其他語言接口,您可以在C、C++、.Net、PL/SQL程式中使用Log4j,其文法和用法與在Java程式中一樣,使得多語言分布式系統得到一個統一一緻的日志元件子產品。而且,通過使用各種第三方擴充,您可以很友善地将Log4j內建到J2EE、JINI甚至是SNMP應用中。

二、Log4j三個元件

Log4j有三個主要的元件:Loggers(記錄器),Appenders (輸出源)和Layouts(布局)。這裡可簡單了解為日志類别,日志要輸出的地方和日志以何種形式輸出。綜合使用這三個元件可以輕松地記錄資訊的類型和級别,并可以在運作時控制日志輸出的樣式和位置。 

1、Loggers

Loggers元件在此系統中被分為五個級别:DEBUG、INFO、WARN、ERROR和FATAL。這五個級别是有順序的,DEBUG < INFO < WARN < ERROR<fatal,分别用來指定這條日志資訊的重要程度,明白這一點很重要,log4j有一個規則:隻輸出級别不低于設定級别的日志資訊,假設loggers級别設定為info,則info、warn、error和fatal級别的日志資訊都會輸出,而級别比info低的debug則不會輸出。 < p="" style="box-sizing: border-box;"></fatal,分别用來指定這條日志資訊的重要程度,明白這一點很重要,log4j有一個規則:隻輸出級别不低于設定級别的日志資訊,假設loggers級别設定為info,則info、warn、error和fatal級别的日志資訊都會輸出,而級别比info低的debug則不會輸出。 <>

2、Appenders

Log4j日志系統允許把日志輸出到不同的地方,如控制台(Console)、檔案(Files)等,可以根據天數或者檔案大小産生新的檔案,可以以流的形式發送到其它地方等等。 

常使用的類如下: 

org.apache.log4j.ConsoleAppender(控制台) 
org.apache.log4j.FileAppender(檔案) 
org.apache.log4j.DailyRollingFileAppender(每天産生一個日志檔案) 
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候産生一個新的檔案) 
org.apache.log4j.WriterAppender(将日志資訊以流格式發送到任意指定的地方) 
           

配置模式: 

log4j.appender.appenderName = className 
           

3、Layouts

有時使用者希望根據自己的喜好格式化自己的日志輸出,Log4j可以在Appenders的後面附加Layouts來完成這個功能。Layouts提供四種日志輸出樣式,如根據HTML樣式、自由指定樣式、包含日志級别與資訊的樣式和包含日志時間、線程、類别等資訊的樣式。 

常使用的類如下: 

org.apache.log4j.HTMLLayout(以HTML表格形式布局) 
org.apache.log4j.PatternLayout(可以靈活地指定布局模式) 
org.apache.log4j.SimpleLayout(包含日志資訊的級别和資訊字元串) 
org.apache.log4j.TTCCLayout(包含日志産生的時間、線程、類别等資訊) 
           

配置模式: 

log4j.appender.appenderName.layout =className
           

一般我們都采用第二種org.apache.log4j.PatternLayout,自定義格式,log4j.properties配置檔案中,這種格式需要我們自定義,如下定義:

log4j.appender.*.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
           

其中含義介紹:

%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出産生該日志事件的線程名
%n 輸出一個回車換行符,Windows平台為“rn”,Unix平台為“n”
%d 輸出日志時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
           

三、Log4j使用執行個體

1.下載下傳log4j.jar包

位址: http://logging.apache.org/log4j/1.2/download.html

2.log4j.properties配置檔案

### 設定###
log4j.rootLogger = debug,stdout,D,E

### 輸出資訊到控制擡 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 輸出DEBUG 級别以上的日志到=D://logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 輸出ERROR 級别以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n 
           

繼續閱讀