欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java日志軟件Log4j的基本使用教程

 更新時(shí)間:2015年12月29日 16:50:49   作者:WOOSHN  
這篇文章主要介紹了Java日志軟件Log4j的基本使用教程,包括回滾和發(fā)送日志郵件等基本功能使用的講解,需要的朋友可以參考下

1.概述
1.1背景
在我們的日常開發(fā)中,日志記錄非常重要。在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析工作;跟蹤代碼運(yùn)行時(shí)軌跡,作為日后審計(jì)的依據(jù);擔(dān)當(dāng)集成開發(fā)環(huán)境中的調(diào)試器的作用,向文件或控制臺(tái)打印代碼的調(diào)試信息。

1.2簡介
Log4j(log for java)是Apache的一個(gè)開放源代碼項(xiàng)目,它提供了一種細(xì)膩的日志管理方式。通過一個(gè)配置文件,我們可以多選擇的控制每條日志的輸出格式和目的地。通過定義信息的級別,我們也可以靈活開關(guān)代碼中的反饋信息。簡單的說log4j就是幫助開發(fā)人員進(jìn)行日志輸出管理的API類庫。它最重要的特點(diǎn)就可以配置文件靈活的設(shè)置日志信息的優(yōu)先級、日志信息的輸出目的地以及日志信息的輸出格式。

2.log4j配置
2.1log4j的類圖

20151229164124913.png (600×300)

  •  Logger -日志寫出器,供程序員輸出日志信息
  • Appender -日志目的地,把格式化好的日志信息輸出到指定的地方去
  • ConsoleAppender -目的地為控制臺(tái)的Appender
  • FileAppender -目的地為文件的Appender
  • RollingFileAppender -目的地為大小受限的文件的Appender
  • Layout -日志格式化器,用來把程序員的logging request格式化成字符串
  •  PatternLayout -用指定的pattern格式化logging request的Layout

2.2定義配置文件
Log4j可以通過java程序動(dòng)態(tài)設(shè)置,該方式明顯缺點(diǎn)是:如果需要修改日志輸出級別等信息,則必須修改java文件,然后重新編譯,很是麻煩。


使用配置文件將使我們的應(yīng)用程序更加靈活配置log,日志輸出方式包括輸出優(yōu)先級、輸出目的地、輸出格式。Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件log4j.properties(鍵=值)。

  • n xml文件
  • n properties文件(推薦使用)

2.3配置文件log4j.properties
在第一次調(diào)用到Log4J時(shí),Log4J會(huì)在類路徑(../web-inf/class/當(dāng)然也可以放到其它任何目錄,只要該目錄被包含到類路徑中即可)中定位這個(gè)文件,并讀入這個(gè)文件完整的配置。這個(gè)配置文件告訴Log4J以什么樣的格式、把什么樣的信息、輸出到什么地方。相應(yīng)的,我們需要配置3個(gè)方面的內(nèi)容:

1、根目錄(級別和目的地);

2、目的地(控制臺(tái)、文件等等);

3、輸出樣式(何種方式顯示日志內(nèi)容)


示例如下:

#設(shè)置日志輸出級別

log4j.rootLogger=debug,appender1

#輸出到控制臺(tái)

log4j.appender.appender1=org.apache.log4j.ConsoleAppender

#樣式為TTCCLayout

log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout


2.4.log4j三組件說明
Log4j有三個(gè)主要的組件:Loggers(記錄器),Appender (輸出源)和Layout(布局)。綜合使用這三個(gè)組件可以輕松的記錄信息的類型和級別,并可以在運(yùn)行時(shí)控制日志輸出的樣式和位置。下面對三個(gè)組件分別進(jìn)行說明:

2.4.1日志記錄器Logger

Logger對象是用來取代System.out或者System.err的日志寫出器,用來供程序員輸出日志信息。


配置根Logger,語法為:

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

其中,level 是日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別。Log4j建議只使用四個(gè)級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān)。比如在這里定義了INFO級別,則應(yīng)用程序中所有DEBUG級別的日志信息將不被打印出來。appenderName就是指定日志信息輸出到哪個(gè)地方??赏瑫r(shí)指定多個(gè)輸出目的地。

2.4.2輸出目的地Appender

Log4j日志系統(tǒng)允許把日志輸出到不同的地方,如控制臺(tái)(Console)、文件(Files)、根據(jù)天數(shù)或者文件大小產(chǎn)生新的文件、以流的形式發(fā)送到其它地方等等。

配置appender,其語法表示為:

log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN

"fully.qualified.name.of.appender.class"可以指定下面五個(gè)目的地中的一個(gè):
1).org.apache.log4j.ConsoleAppender(控制臺(tái))
2).org.apache.log4j.FileAppender(文件)
3).org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件)
4).org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件)
5).org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
(1).ConsoleAppender選項(xiàng)

  • Threshold=WARN:指定日志消息的輸出最低層次。
  • ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。
  • Target=System.err:默認(rèn)情況下是:System.out,指定輸出控制臺(tái)

(2).FileAppender 選項(xiàng)

  • Threshold=WARN:指定日志消息的輸出最低層次。
  • ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。
  • File=mylog.log:指定消息輸出到mylog.log文件。
  • Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。

(3).DailyRollingFileAppender 選項(xiàng)

  • Threshold=WARN:指定日志消息的輸出最低層次。
  • ImmediateFlush=true:默認(rèn)值是true,意味著所有的消息都會(huì)被立即輸出。
  • File=mylog.log:指定消息輸出到mylog.log文件。
  • Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
  • DatePattern='.'yyyy-ww:每周滾動(dòng)一次文件,即每周產(chǎn)生一個(gè)新的文件。當(dāng)然也可以指定按月、周、天、時(shí)和分。

即對應(yīng)的格式如下:
1)'.'yyyy-MM: 每月
2)'.'yyyy-ww: 每周
3)'.'yyyy-MM-dd: 每天
4)'.'yyyy-MM-dd-a: 每天兩次
5)'.'yyyy-MM-dd-HH: 每小時(shí)
6)'.'yyyy-MM-dd-HH-mm: 每分鐘
4.RollingFileAppender 選項(xiàng)

  • Threshold=WARN:指定日志消息的輸出最低層次。
  • ImmediateFlush=true:默認(rèn)值是true,意味著所有的消息都會(huì)被立即輸出。
  • File=mylog.log:指定消息輸出到mylog.log文件。
  • Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
  • MaxFileSize=100KB: 后綴可以是KB, MB或者是 GB.在日志文件到達(dá)該大小時(shí),將會(huì)自動(dòng)滾動(dòng),即將原來的內(nèi)容移到mylog.log.1文件。
  • MaxBackupIndex=2:指定可以產(chǎn)生的滾動(dòng)文件的最大數(shù)。

2.4.3格式(布局)Layout

有時(shí)希望根據(jù)自己的喜好格式化自己的日志輸出。Log4j可以在Appender的后面附加Layout來完成這個(gè)功能。

配置Layout,其語法表示為:

log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN


Layout提供了四種日志輸出樣式,如下所示:

(1).org.apache.log4j.HTMLLayout(以HTML表格形式布局),
(2).org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
(3).org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
(4).org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)

HTMLLayout 選項(xiàng)
LocationInfo=true:默認(rèn)值是false,輸出java文件名稱和行號
Title=my app file: 默認(rèn)值是 Log4J Log Messages.
2.PatternLayout 選項(xiàng)
ConversionPattern=%m%n :指定怎樣格式化指定的消息。

這里需要說明的就是日志信息格式中幾個(gè)符號所代表的含義:

  • -x號:x信息輸出時(shí)左對齊
  • %p: 輸出日志信息優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL,
  • %d: 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日22:10:28,921
  • %r: 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)
  • %c: 輸出日志信息所屬的類目,通常就是所在類的全名
  • %t: 輸出產(chǎn)生該日志事件的線程名
  • %l: 輸出日志事件的發(fā)生位置,相當(dāng)于%C.%M(%F:%L)的組合,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10)
  • %x: 輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應(yīng)用中。
  • %%: 輸出一個(gè)"%"字符
  • %F: 輸出日志消息產(chǎn)生時(shí)所在的文件名稱
  • %L: 輸出代碼中的行號
  • %m: 輸出代碼中指定的消息,產(chǎn)生的日志具體信息
  • %n: 輸出一個(gè)回車換行符

可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:

1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認(rèn)的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,"-"號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會(huì)將左邊多出的字符截掉,但小于30的話也不會(huì)有空格。
4)%20.30c:如果category的名稱小于20就補(bǔ)空格,并且右對齊,如果其名稱長于30字符,就從左邊把多出的字符截掉。

2.5.log4j配置示例
LOG4J的配置之簡單使它遍及于越來越多的應(yīng)用中:Log4J配置文件實(shí)現(xiàn)了輸出到控制臺(tái)、文件、回滾文件、發(fā)送日志郵件、輸出到數(shù)據(jù)庫日志表、自定義標(biāo)簽等全套功能。

log4j.rootLogger=DEBUG,CONSOLE,A1,im 
log4j.addivity.org.apache=true

n 應(yīng)用于控制臺(tái)

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=%d-%c-%-4r[%t]%-5p%c%x-%m%n

n 應(yīng)用于文件

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=%d - %c -%-4r [%t] %-5p %c %x - %m%n

n 應(yīng)用于文件回滾

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
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=%d - %c -%-4r [%t] %-5p %c %x - %m%n

n 應(yīng)用于socket

log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost 
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true 
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.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

n 發(fā)送日志給郵件

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message 
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout 
log4j.appender.MAIL.layout.ConversionPattern=%d-%c-%-4r[%t]%-5p%c%x-%m%n

n 用于數(shù)據(jù)庫

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 ('%d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout 
log4j.appender.DATABASE.layout.ConversionPattern=%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

n 自定義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 = corlin@cybercorlin.net

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


3.在WEB應(yīng)用中為SPRING配置Log4j
首先需要在web.xml文件中加入下面的配置語句:

<!-- 為避免項(xiàng)目間沖突,定義唯一的 webAppRootKey--> 
<context-param> 
  <param-name>webAppRootKey</param-name> 
  <param-value>myProject.root</param-value> 
</context-param> 
<!-- 加載log4j的配置文件log4j.properties --> 
<context-param> 
  <param-name>log4jConfigLocation</param-name> 
  <param-value>/WEB-INF/classes/config/log4j/log4j.properties</param-value> 
</context-param> 
  <!-- 設(shè)定刷新日志配置文件的時(shí)間間隔,這里設(shè)置為60s --> 
<context-param> 
  <param-name>log4jRefreshInterval</param-name> 
  <param-value>60000</param-value> 
</context-param> 
 
<!-- 加載Spring框架中的log4j監(jiān)聽器Log4jConfigListener --> 
<listener> 
  <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

屬性log4jConfigLocation的值建議還是設(shè)置為:/WEB-INF/classes/log4j.properties,這樣我們在不啟動(dòng)web應(yīng)用的時(shí)候,做一些測試就能夠正確地記錄日志信息。Log4jConfigListener是spring提供的工具類,它開啟一個(gè)log4j的監(jiān)視線程,并每60(log4jRefreshInterval變量定義)秒檢測日志配置變化,從而不需要每次重新啟動(dòng)web服務(wù)來應(yīng)用新的配置。在tomcat中沒有根據(jù)web應(yīng)用來分開系統(tǒng)屬性。所以必須為每一個(gè)web應(yīng)用定義唯一的"webAppRootKey",我們?nèi)∶麨閣ebApp.root.在啟動(dòng)環(huán)境后,Log4jConfigListener會(huì)將值注入到webApp.root變量。

4.在代碼中使用Log4j
4.1.得到記錄器
使用Log4j,第一步就是要獲取日志記錄器,這個(gè)記錄器將負(fù)責(zé)控制日志信息。

public static Logger getLogger( String name)

通過指定的名字獲得記錄器,如果必要的話,則為這個(gè)名字創(chuàng)建一個(gè)新的記錄器。name一般取本類的名字,比如:

static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

4.2.讀取配置文件
當(dāng)獲得了日志記錄器之后,第二步將配置Log4j環(huán)境,其語法為:

若將log4j.properties放在工程根目錄下也可不寫此句,程序會(huì)自動(dòng)找到配置文件。
BasicConfigurator.configure (): 自動(dòng)快速地使用缺省Log4j環(huán)境。PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性文件編寫的配置文件。
DOMConfigurator.configure ( String filename ):讀取XML形式的配置文件。

log4j使用以上3種配置器來初始化,使用PropertyConfigurator適用于所有的系統(tǒng)。如下的語句。

PropertyConfigurator.configure("log4j.properties");

對于一般的java project可以不使用上面的語句初始化log4j,log4j會(huì)自動(dòng)在classpath下,找到配置文件并初始化。如果log4j不能自動(dòng)初始化配置文件,那么就需要用上面的方法進(jìn)行初始化。

注意:初始化配置文件,最好只在系統(tǒng)啟動(dòng)的時(shí)候執(zhí)行一次,如果執(zhí)行多次,一是浪費(fèi)資源,二就是對于老版本的log4j,使用DailyRollingFileAppender時(shí),可能會(huì)出現(xiàn)問題。


4.3.插入記錄信息(格式化日志信息)
當(dāng)上兩個(gè)必要步驟執(zhí)行完畢,您就可以輕松地使用不同優(yōu)先級別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:

Logger.debug ( Object message ) ;

相關(guān)文章

最新評論