Log4j使用大全

一、介紹 

Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日誌信息輸送的目的地是控制檯、文件、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIXSyslog守護進程等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌信息的級別,我們能夠更加細緻地控制日誌的生成過程。 

Log4j由三個重要的組件構成:日誌信息的優先級,日誌信息的輸出目的地,日誌信息的輸出格式。日誌信息的優先級從高到低有ERROR、WARN、INFO、DEBUG,分別用來指定這條日誌信息的重要程度;日誌信息的輸出目的地指定了日誌將打印到控制檯還是文件中;而輸出格式則控制了日誌信息的顯示內容。 

 

二、配置文件 

其實您也可以完全不使用配置文件,而是在代碼中配置Log4j環境。但是,使用配置文件將使您的應用程序更加靈活。 

Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是properties格式的文件。下面我們介紹使用properties格式做爲配置文件的方法: 

示例: 

log4j.rootLogger=INFO,A1 

log4j.appender.A1=org.apache.log4j.ConsoleAppender 

log4j.appender.A1.layout=org.apache.log4j.PatternLayout 

log4j.appender.A1.layout.ConversionPattern=%-4r%-5p [%t] %37c %3x - %m%n 

 

1.配置根Logger,其語法爲: 

log4j.rootLogger= [ level ] , appenderName, appenderName, … 

其中,level是日誌記錄的優先級,分爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這裏定義的級別,您可以控制到應用程序中相應級別的日誌信息的開關。比如在這裏定義了INFO級別,則應用程序中所有DEBUG級別的日誌信息將不被打印出來。 

appenderName就是指定日誌信息輸出到哪個地方。您可以同時指定多個輸出目的地。 

 

2.配置日誌信息輸出目的地Appender,其語法爲: 

log4j.appender.appenderName= fully.qualified.name.of.appender.class 

log4j.appender.appenderName.option1= value1 

… 

log4j.appender.appenderName.optionN= valueN 

其中,Log4j提供的appender有以下幾種: 

org.apache.log4j.ConsoleAppender(控制檯), 

org.apache.log4j.FileAppender(文件), 

org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件), 

org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件), 

org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方) 

(1).ConsoleAppender選項 

Threshold=WARN:指定日誌消息的輸出最低層次。 

ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。 

Target=System.err:默認情況下是:System.out,指定輸出控制檯 

(2).FileAppender選項 

Threshold=WARN:指定日誌消息的輸出最低層次。 

ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。 

File=mylog.txt:指定消息輸出到mylog.txt文件。 

Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。 

(3).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: 每分鐘 

(4).RollingFileAppender選項 

Threshold=WARN:指定日誌消息的輸出最低層次。 

ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。 

File=mylog.txt:指定消息輸出到mylog.txt文件。 

Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。 

MaxFileSize=100KB:後綴可以是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。 

MaxBackupIndex=2:指定可以產生的滾動文件的最大數。 

 

3.配置日誌信息的佈局,其語法爲: 

log4j.appender.appenderName.layout= fully.qualified.name.of.layout.class 

log4j.appender.appenderName.layout.option1= value1 

… 

log4j.appender.appenderName.layout.optionN= valueN 

其中,Log4j提供的layout有以下幾種: 

org.apache.log4j.HTMLLayout(以HTML表格形式佈局), 

org.apache.log4j.PatternLayout(可以靈活地指定佈局模式), 

org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串), 

org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息) 

 

4、輸出格式設置 

在配置文件中可以通過log4j.appender.A1.layout.ConversionPattern設置日誌輸出格式。 

參數: 

%p:輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL, 

%d:輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy MMM ddHH: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字符,就從左邊交遠銷出的字符截掉。 

 

三、在程序中的使用 

在程序中使用Log4j之前,首先要將commons-logging.jar和logging-log4j-1.2.9.jar導入到classpath中,並將log4j.properties放於src根目錄中。接下來就可以使用了。 

 

1.得到記錄器 

使用Log4j,第一步就是獲取日誌記錄器,這個記錄器將負責控制日誌信息。其語法爲: 

publicstatic Logger getLogger( String name), 

通過指定的名字獲得記錄器,如果必要的話,則爲這個名字創建一個新的記錄器。Name一般取本類的名字,比如: 

staticLogger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ; 

注:推薦使用commons-logging結合log4j進行日誌記錄 

privatestatic Log logger = LogFactory.getLog(Yourclass.class); 

 

2.插入記錄信息(格式化日誌信息) 

當上兩個必要步驟執行完畢,您就可以輕鬆地使用不同優先級別的日誌記錄語句插入到您想記錄日誌的任何地方,其語法如下: 

Logger.debug( Object message ) ; 

Logger.info( Object message ) ; 

Logger.warn( Object message ) ; 

Logger.error( Object message ) ; 

 

四、Log4j比較全面的配置 

LOG4J的配置之簡單使它遍及於越來越多的應用中了:Log4J配置文件實現了輸出到控制檯、文件、回滾文件、發送日誌郵件、輸出到數據庫日誌表、自定義標籤等全套功能。擇其一二使用就夠用了。

Java代碼  

log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

#應用於控制檯

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.Threshold=DEBUG

log4j.appender.CONSOLE.Target=System.out

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c-%-4r [%t] %-5p %c %x - %m%n

#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]n%c[CATEGORY]%n%m[MESSAGE]%n%n

#應用於文件

log4j.appender.FILE=org.apache.log4j.FileAppender

log4j.appender.FILE.File=file.log

log4j.appender.FILE.Append=false

log4j.appender.FILE.layout=org.apache.log4j.PatternLayout

log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c-%-4r [%t] %-5p %c %x - %m%n

#應用於文件回滾

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.Threshold=ERROR

#文件位置,也可以用變量${java.home}rolling.log

log4j.appender.ROLLING_FILE.File=rolling.log

#true:添加 false:覆蓋

log4j.appender.ROLLING_FILE.Append=true

#文件最大尺寸

log4j.appender.ROLLING_FILE.MaxFileSize=10KB

#備份數

log4j.appender.ROLLING_FILE.MaxBackupIndex=1

log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout

log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c-%-4r [%t] %-5p %c %x - %m%n

#應用於socket

log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender

log4j.appender.SOCKET.RemoteHost=localhost

log4j.appender.SOCKET.Port=5001

log4j.appender.SOCKET.LocationInfo=true

#Set up for Log Facter 5

log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout

log4j.appender.SOCKET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

 

#Log Factor 5 Appender

log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender

log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

#發送日誌給郵件

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender

log4j.appender.MAIL.Threshold=FATAL

log4j.appender.MAIL.BufferSize=10

log4j.appender.MAIL.From=[email protected]

log4j.appender.MAIL.SMTPHost=www.wusetu.com

log4j.appender.MAIL.Subject=Log4J Message

log4j.appender.MAIL.To=[email protected]

log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout

log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c-%-4r [%t] %-5p %c %x - %m%n

#用於數據庫

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test

log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver

log4j.appender.DATABASE.user=root

log4j.appender.DATABASE.password=

log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c-%-4r [%t] %-5p %c %x - %m%n')

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout

log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c-%-4r [%t] %-5p %c %x - %m%n

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender

log4j.appender.A1.File=SampleMessages.log4j

log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'

log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

#自定義Appender

log4j.appender.im=net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host=mail.cybercorlin.net

log4j.appender.im.username=username

log4j.appender.im.password=password

log4j.appender.im.recipient=[email protected]

log4j.appender.im.layout=org.apache.log4j.PatternLayout

log4j.appender.im.layout.ConversionPattern=[framework] %d - %c-%-4r [%t] %-5p %c %x - %m%n

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章