簡單設定
#指定logger # 配置Logger组件 # 设定Log4j的日志级别(error warn info debug) # 输出目的地(Console, logfile是appender的名字,是自己定义的,后面才赋予具体的含义) log4j.rootLogger=debug, Console, logfile ################################################################################################################### #指定appender(目的地) #设定Logger的Console(appender的名字)的Appender类型为控制台输出 #org.apache.log4j.ConsoleAppender 表明 Console是控制台输出 log4j.appender.Console=org.apache.log4j.ConsoleAppender #输出的格式 #设定Console的Appender布局Layout #org.apache.log4j.PatternLayout(可以灵活地指定布局模式)包含选项: # ConversionPattern=%m%n :指定怎样格式化指定的消息 log4j.appender.Console.layout=org.apache.log4j.PatternLayout #2009-09-29 07:30:43,265 INFO com.itcast.web.controller.SearchCdServlet.doGet() - e log4j.appender.Console.layout.ConversionPattern=%d %p %c.%M() - %m%n ################################################################################################################### #设定Logger的logfile(appender的名字)的Appender类型为文件大小到达指定尺寸的时候产生一个新的文件 log4j.appender.logfile=org.apache.log4j.RollingFileAppender #设定文件的输出路径(指定文件的名字和路径,tomcat的启动路径) log4j.appender.logfile.File=../logs/logstrore.log #设定后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logstrore.log.1文件 log4j.appender.logfile.MaxFileSize=2048KB #Keep three backup files.指定可以产生的滚动文件的最大数 log4j.appender.logfile.MaxBackupIndex=4#设定logfile的Appender布局Layout log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p %c.%M() - %m%n ###################################################################################################################
#Log4J##「簡介
Log4J是Apache的一個開放原始碼項目,它是一個日誌操作包,透過使用Log4J,可以指定日誌資訊輸出的目的地,例如控制台、檔案、CUI元件、NT的事件記錄器;還可以控制每一條日誌輸出格式。此外,透過定義日誌資訊的級別,能夠非常細緻地控制日誌的輸出,最令人感興趣的是,這些功能可以透過一個設定檔來靈活進行配置,而不需要修改應程式碼。
在應用程式中輸出日誌有3個目的:
l 監視程式碼中變數的變化情況,把資料週期性記錄到檔案中供其他應用進行統計分析工作
l 追蹤程式碼執行時間軌跡,作為日後審計的依據
l 擔當整合開發環境中的偵錯器的作用,向文件和控制台列印程式碼的偵錯資訊
#要在程式中輸出日誌,最普通的做法就是在程式碼中嵌入語句,這些列印語句可以把日誌輸出到控制台或檔案中,比較好的做法就是建構一個日誌操作類別來封裝此類操作,而不是讓一系列的列印語句充斥程式碼的主體。
在強調可重複使用元件的今天,除了自己從頭到尾開發一個可重複使用的日誌操作類別名,Apache為我們提供了一個強而有力的現成的日誌操作包Log4J。
Log4J主要由三大元件構成:
l Appender:定義了日誌資訊輸出的目的地,指定日誌資訊應該被輸出到什麼地方,這些地方可以是控制台、檔案、網路裝置等
l Layout: 指定日誌訊息的輸出格式這個3個元件協同工作,使得開發者能夠依據日誌資訊類別記錄訊息,並能夠在程式運行期間,控制日誌資訊的輸出格式以及日誌存放地點。
一個Logger可以有多個Appender,這表示日誌資訊可以同時輸出到多個裝置上,每個Appender都對應一個Layout,Layout決定了輸出日誌資訊的格式。假定根據實際需要,要求程式中的日誌資訊既能輸出到程式運行的控制台下,又能輸出到指定的檔案中,並且當日誌資訊輸出到控制台時SimplLayout佈局,當日誌資訊輸出到檔案時PatternLayout佈局,此時Logger、Appender和Layout3個元件的關聯如圖
Appender元件(指定輸出目的) | 控制台(Console)
Layout元件
Layout元件用來決定日誌的輸出格式,它有下列幾種型別
l org.apache.log4j.HTMLLayout (以HTML表格形式佈局)
l org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
l org.apache.log4j.SimpleLayout(包含日誌資訊等級與資訊#l org.apache.log4j.SimpleLayout(包含日誌資訊等級與資訊字串)
l org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒和類別等資訊)
在應用程式中使用Log4J,先在一個設定檔中設定Log4j的各個元件,然後就可以在程式中透過Log4JAPI來操作日誌
定義設定檔
Log4J由3個重要的元件構成:Logger、Appender和layout。 Log4J支援在程式中以程式設計的方式設定這些元件,也支援透過設定檔來配置元件,後者更為靈活。
Log4J支援兩種設定檔格式,一種是XML格式,一種是Java屬性文件,
1. 設定Logger元件
其文法為:
log4j.rootLogger
= [ level ] , appenderName1, appenderName2, …
範例:
log4j.rootLogger =WARN,file,console
level : 是日誌記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或您定義的等級。
Log4j建議只使用四個級別,優先權從高到低分別是ERROR>WARN>INFO>DEBUG。透過在這裡定義的級別,您可以控製到應用程式中相應級別的日誌資訊的開關。比如在這裡定 義了INFO級別,則應用程式中所有DEBUG級別的日誌資訊將不被列印出來。
appenderName:就是指定日誌資訊輸出到哪個地方。您可以同時指定多個輸出目的地。
All:列印所有日誌。
Off:關閉所有的日誌。
例如:log4j.rootLogger=info,A1,B2,C3
2. 配置Appender 元件
其文法為:
log4j.appender.appenderName
=fully.qualified.name.of.appender.class.
範例:
log4j.appender.console=org.apache.log4j .ConsoleAppender
"fully.qualified.name.of.appender.class" 可以指定下列五個目的地中的一個:
# 1.org.apache.log4j.ConsoleAppender(主機)
##
2.org.apache.log4j.FileAppender(文件)【只能把日誌輸出一個文件,不推薦】
3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案)
4.org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案)
5.org.apache.log4j.WriterAppender(將日誌資訊以串流格式傳送至任意指定的地方)
#A.ConsoleAppender選項 Threshold=WARN:指定記錄訊息的最低輸出層級。
ImmediateFlush=true:預設值是true,意思是所有的訊息都會立即被輸出。
Target=System.err:預設為:System.out,指定輸出控制台
B.FileAppender
Threshold=WARN:指定日誌訊息的輸出最低層次。
ImmediateFlush=true:預設值是true,意謂著所有的訊息都會立即被輸出。
File=mylog.txt:指定訊息輸出到mylog.txt檔案。
Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆寫
指定的檔案內容。
C.DailyRollingFileAppender選項
# Threshold=WARN:指定日誌訊息的輸出最低層級。
ImmediateFlush=true:預設值是true,意謂著所有的訊息都會立即被輸出。
File=mylog.txt:指定訊息輸出至mylog.txt檔案。
Append=false:預設值是true,即將訊息增加到指定檔案中,false指將訊息覆寫指定
#的檔案內容。
DatePattern='.'yyyy-ww:每週捲動文件,即每週產生新的文件。當然也可
以指定按月、週、天、時和分。即對應的格式如下:
1)'.'yyyy-MM: 每月
2)'.'yyyy-ww: 每週
3)'.'yyyy-MM-dd: 每天
4)'.'yyyy-MM-dd-a: 每天兩次
5)'.'yyyy-MM-dd-HH: 每小時
6)'.'yyyy-MM-dd-HH-mm: 每分鐘
#D.RollingFileAppender 選項
Threshold=WARN:指定日誌訊息的輸出最低層次。
ImmediateFlush=true:預設值是true,意圖所有的訊息都會立即被輸出。
File=mylog.log:指定訊息輸出至mylog.txt檔案。
Append=false:預設值為true,即將訊息增加到指定檔案中,false指將訊息覆蓋指
#設定的檔案內容。
MaxFileSize=100KB:
字尾可以是KB, MB 或是 GB. 在日誌檔案到達該大小
時,將會自動捲動,即將原來的內容移到mylog.log.1檔案。
MaxBackupIndex=2:指定可產生的捲動檔案的最大數。
3、設定日誌資訊的格式
其語法為:
1)log4j .appender.appenderName.layout=fully.qualified.name.of.layout.class
# "fully.qualified.name.of.layout.class" ##可指定下方4
:
範例:log4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=%d %p %c.%M()-%m%n
1.org.apache.log4j.HTMLLayout(以HTML表格形式佈局)包含選項:
LocationInfo=true:預設值是false,輸出java檔案名稱和行號
Title=my app file: 預設值是 Log4J Log Messages.
ConversionPattern=%m%n
:指定怎樣格式化指定的訊息。
3.org.apache.log4j.SimpleLayout(包含日誌資訊的等級與資訊字串)
4.org。
%-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
日誌訊息格式中幾個符號所代表的意思:
-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: 輸出日誌訊息產生時所在的檔案名稱
訊息,產生的日誌具體資訊
%n: 輸出一個回車換行符,Windows平台為"\r\n",Unix平台為"\n"輸出日誌訊息換行
%M 代表方法的名稱
#可以在
%
與模式字元之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如: 1)%20c:以20中指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20。 2)%-20c:指定輸出category的名稱,且最小的寬度是20,而category的名稱小於20的話,"-"號指定為左對齊。 3)%.30c:指定為輸出category的名詞,而最大的寬度是30,而如果category的名稱大於30的話,就會將左邊多出的字元截斷,但小於30的話也不會有空格。 4)%20.30c:如果category的名稱小於20就補空格,且右對齊,如果其名稱長於30字符,就從左邊交遠銷出的字符截掉。
在程式中存取Log4J,需要用到Log4J的JAR檔案。 在程式中使用Log4J包含以下程序:
l 取得日誌記錄器
l 輸出日誌資訊
在進入學習Log4J之前,我們要先了解兩個通用日誌套件中的常用介面LogFactory和Log,以下分別介紹它們的用法。
Log介面
通用日誌包把日誌訊息分成6種等級:FATAL(致命的)、ERROR(錯誤)、WARN(警告)、INFO(訊息)、DEBUG(調試)和TRACE(細節)。其中FATAL等級最高,TRACE等級最低。通用日誌包採用日誌等級機制,可靈活的控制輸出的日誌內容。
org.apache.commons.logging.Log介面代表日誌器,它提供了一組輸出日誌的方法:
l error(Object message): 輸出ERROR等級的日誌訊息。
l ……
l trace(Object message): 輸出TRACE等級的日誌訊息。
針對上述輸出日誌的方法,只有當它輸出日誌的等級大於或等於為日誌其所設定的日誌等級時,這個方法才會真正執行。 例如,如果日誌器的日誌等級為WARN,那麼在程式中,它的fatal()、error()和warn()方法會被執行,而info()、debug()和trace()方法不會被執行。
Log介面也提供了一組判斷是否允許輸出特定等級的日誌訊息的方法:
l isFatalEnabled()
l isErrorEnabled()
#l …
l isTraceEnabled()
在程式輸出某一層級的日誌訊息之前,提倡先呼叫上述方法來判斷該層級的日誌是否允許輸出,這有助於提高應用的性能。例如以下程式碼先把日誌訊息加入StringBuffer中,最後在呼叫日誌器的debug()方法輸出日誌:
StringBuffer buf = new StringBuffer();
buf.append(“ Login Successsul - ”);
buf.append(“Name:”);
buf.append(username);
log.debug(buf.toString() );
對於以上程式碼,如果日誌器實際上不允許輸出DEBUG層級的日誌,那麼執行日誌器的debug()方法不會輸出任何訊息,此時向StringBuffer中新增訊息的一大串操做都將是多餘的。為了提升效能,可以合理的使用isDebugEnabled()方法,避免套用執行多餘的動作:
if(log.isDebugEnabled){
StringBuffer buf = new StringBuffer();
buf.append(“Login Successsul - ”);
buf.append(“Name:”);
buf.append(username);
log.debug(bug.toString());
}
#(二)LogFactory接口
org.apache.commons.logging.LogFactory介面提供了兩個獲得日誌器實例的靜態方法:
public static Log getLog(String name)throws LogConfigurationException;
public static Log getLog(Class class) throws LogConfigurationException;
第一個getLog()方法以name參數作為日誌器的名字;第二個getLog()方法以class參數指定的類別的名字作為日誌器的名字,以下是第二個getLog()方法的實作方式:
public static Log getLog(Class class) throws LogConfigurationException{
getLog(class.getName); //call getLog(String name)
}
小結
Log4J主要由3大元件構成:Logger、Appender和Layout。 Logger控制日誌資訊的輸出;Appender決定日誌資訊的輸出目的地;Layout決定日誌資訊的輸出格式。 Log4J允許使用者在設定檔中靈活地配置這些元件。在程式中使用Log4J非常方便,只要先取得日誌記錄器,然後讀取設定檔並設定Log4J環境,接下來就可以在程式中任何需要輸出日誌的地方,呼叫Logger類別的適當方法來產生日誌。
以上是Log4j的基本使用方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!