【1】log4j概述
log4j是一個用Java編寫的可靠,快速和靈活的日志架構(API),它在Apache軟體許可下釋出。
Log4j已經被移植到了C,C++,C#,Perl,Python和Ruby等語言中。
Log4j是高度可配置的,并可通過在運作時的外部檔案配置。它根據記錄的優先級别,并提供機制,以訓示記錄資訊到許多的目的地,諸如:資料庫,檔案,控制台,UNIX系統日志等。
核心對象
Logger對象:
頂級層的Logger,它提供Logger對象。Logger對象負責捕獲日志資訊及它們存儲在一個空間的層次結構。
布局對象:
該層提供其用于格式化不同風格的日志資訊的對象。布局層提供支援Appender對象到釋出日志資訊之前。
布局對象的釋出方式是人類可讀的及可重複使用的記錄資訊的一個重要的角色。
Appender對象:
下位層提供Appender對象。Appender對象負責釋出日志資訊,以不同的首選目的地,如資料庫,檔案,控制台,UNIX系統日志等。
以下是顯示Log4J架構的不同元件的虛拟圖:
支援對象:
log4j架構的其他重要的對象起到日志架構的一個重要作用:
Level對象:
級别對象定義的任何記錄資訊的粒度和優先級。有記錄的七個級别在API中定義:OFF, DEBUG, INFO, ERROR, WARN, FATAL 和 ALL
Filter對象:
過濾對象用于分析日志資訊及是否應記錄或不用這些資訊做出進一步的決定。
一個appender對象可以有與之關聯的幾個Filter對象。如果日志記錄資訊傳遞給特定Appender對象,都和特定Appender相關的Filter對象準許的日志資訊,然後才能釋出到所連接配接的目的地。
對象渲染器:
ObjectRenderer對象是一個指定提供傳遞到日志架構的不同對象的字元串表示。這個對象所使用的布局對象來準備最後的日志資訊。
【2】Log4j的架構
Log4j中的三個主要組成部分:
- Logger - 日志寫出器,供程式員輸出日志資訊 ;
- Appender - 日志目的地,把格式化好的日志資訊輸出到指定的地方去
ConsoleAppender - 目的地為控制台的Appender ;
FileAppender - 目的地為檔案的Appender ;
RollingFileAppender-目的地為大小受限的檔案的Appender;
DailyRollingFileAppender-每天産生一個日志檔案的Appender;
WriterAppender-将日志資訊以流格式發送到任意指定的地方的Appender;
- Layout - 日志格式化器,用來把程式員的logging request格式化成字元串
SimpleLayout - 對日志消息進行簡單的格式化,格式為“級别 – 資訊”;
HTMLLayout- 講日志消息格式化成HTML格式 ;
PatternLayout - 用指定的pattern格式化logging request的Layout;
TTCCLayout-包含日志産生的時間、線程、類别等等資訊;
【3】log4j調試級别
org.apache.log4j.Level類提供以下級别,但也可以通過Level類的子類自定義級别。
級别優先級如下:
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
【4】log4j列印格式化資訊
-X号: X資訊輸出時左對齊;
%p: 輸出日志資訊優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸出日志時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c: 輸出日志資訊所屬的類目,通常就是所在類的全名
%t: 輸出産生該日志事件的線程名
%l: 輸出日志事件的發生位置,相當于%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
%x: 輸出和目前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%%: 輸出一個"%"字元
%F: 輸出日志消息産生時所在的檔案名稱
%L: 輸出代碼中的行号
%m: 輸出代碼中指定的消息,産生的日志具體資訊
%n: 輸出一個回車換行符,Windows平台為"/r/n",Unix平台為"/n"輸出日志資訊換行
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,預設的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,"-"号指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會将左邊多出的字元截掉,但小于30的話也不會有空格。
4)%20.30c:如果category的名稱小于20就補空格,并且右對齊,如果其名稱長于30字元,就從左邊較遠輸出的字元截掉。