Log4j是Apache的一個開放源代碼項目,通過使用Log4j,控制日志信息輸送的目的地可以為控制台、文件、數據庫、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;可以控制每一條日志的信息內容和信息輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程;甚至還可以在不需要修改業務邏輯代碼、重啟web服務,只需要通過一個修改配置文件就可以實現控制項目的日志動作。
首先,日志的級別有:OFF 、FATAL 、ERROR、WARN、INFO、DEBUG、TRACE 、ALL 等等。
OFF:關閉了日志信息
FATAL:可能導致應用中止的嚴重事件錯誤
ERROR:嚴重錯誤 主要是程序的錯誤
WARN:一般警告,比如session丟失
INFO:一般要顯示的信息,比如登錄登出
DEBUG:程序的調試信息
TRACE:比DEBUG更細粒度的事件信息
ALL:打開所有級別的日志
log4j提供了一系列的Appender,允許將日志輸送到不同的地方,如控制台、文件、數據庫等:
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.jdbc.JDBCAppender(數據庫)
- org.apache.log4j.net.SMTPAppender(郵件)
- org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
- org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
結合日志的級別,可以將不同級別的日志信息輸送到不同的位置作為記錄或者事后查找問題作為依據。一般的信息可以通過文件或者數據庫的形式存儲,錯誤信息可以發送郵件給相關的負責人或者發短信報警給相關的負責人,這些在log4j看來輕松搞定。此刻,已經覺得Java輕松做掉了PHP需要花費大量工作才能搞定的事情。
關於log4j的配置參數請參考網上的資料,下面就簡單的講解如何在Spring框架中整合log4j作為日志的操作組件來服務項目吧:
1. pom.xml 引入log4j組件依賴包:
1 <dependency> 2 <groupId>log4j</groupId> 3 <artifactId>log4j</artifactId> 4 <version>1.2.15</version> 5 <scope>runtime</scope> 6 </dependency>
2. web.xml里邊配置servlet容器啟動時,自動加載log4j配置並注入組件:
1 <context-param> 2 <param-name>log4jConfigLocation</param-name> 3 <param-value>classpath:conf/log4j.properties</param-value> 4 </context-param> 5 <context-param> 6 <param-name>log4jRefreshInterval</param-name> 7 <param-value>5000</param-value> 8 </context-param> 9 <listener> 10 <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 11 </listener>
這里,我將log4j.properties配置文件存放到classpath的conf目錄下,並啟動一個watchdog線程每5秒掃描配置文件的變化,重新調整日志的策略,實現在不調整邏輯代碼即可實現日志的策略變更。通過log4j.properties詳細配置了日志的策略,如下:
1 # +======================================================================+# 2 log4j.rootLogger=${log4j.log.level},${log4j.log.target} 3 log4j.addivity.org.apache=true 4 # +======================================================================+# 5 # | [target] - Console 6 # +----------------------------------------------------------------------+# 7 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 8 log4j.appender.CONSOLE.Threshold=${log4j.log.level} 9 log4j.appender.CONSOLE.Encoding=${log4j.log.encoding} 10 log4j.appender.CONSOLE.Target=System.out 11 log4j.appender.CONSOLE.layout=${log4j.log.layout} 12 log4j.appender.CONSOLE.layout.ConversionPattern=${log4j.log.layout.pattern} 13 # +======================================================================+# 14 # | [target] - FILE 15 # +----------------------------------------------------------------------+# 16 log4j.appender.FILE=org.apache.log4j.RollingFileAppender 17 log4j.appender.FILE.Threshold=${log4j.log.level} 18 log4j.appender.FILE.Encoding=${log4j.log.encoding} 19 log4j.appender.FILE.File=${log4j.log.dir}/runtime.log 20 log4j.appender.FILE.Append=true 21 log4j.appender.FILE.MaxFileSize=2048KB 22 log4j.appender.FILE.MaxBackupIndex=10 23 log4j.appender.FILE.layout=${log4j.log.layout} 24 log4j.appender.FILE.layout.ConversionPattern=${log4j.log.layout.pattern} 25 # +======================================================================+# 26 # | [target] - DATABASE 27 # +----------------------------------------------------------------------+# 28 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 29 log4j.appender.DATABASE.Threshold=ERROR 30 log4j.appender.DATABASE.URL=jdbc:mysql://127.0.0.1:3306/spring 31 log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver 32 log4j.appender.DATABASE.user=root 33 log4j.appender.DATABASE.password=liuriqi 34 log4j.appender.DATABASE.layout=${log4j.log.layout} 35 log4j.appender.DATABASE.sql=INSERT INTO tv_log4j(message)VALUES('${log4j.log.layout.pattern}') 36 # +======================================================================+# 37 # | [target] - EMAIL 38 # +----------------------------------------------------------------------+# 39 log4j.appender.EMAIL=org.apache.log4j.net.SMTPAppender 40 log4j.appender.EMAIL.Threshold=FATAL 41 log4j.appender.EMAIL.BufferSize=10 42 log4j.appender.EMAIL.From=fromuser@gmail.com 43 log4j.appender.EMAIL.SMTPHost=localhost 44 log4j.appender.EMAIL.Subject=Log4J Message 45 log4j.appender.EMAIL.To=touser@gmail.com 46 log4j.appender.EMAIL.layout=${log4j.log.layout} 47 log4j.appender.EMAIL.layout.ConversionPattern=${log4j.log.layout.pattern} 48 # +======================================================================+# 49 上面配置相關的變量,我提取出來統一放到變量配置文件里邊,如下: 50 51 # +======================================================================+# 52 # | log4j config 53 # +----------------------------------------------------------------------+# 54 log4j.log.dir=logs/ 55 #log4j.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF 56 log4j.log.level=DEBUG 57 #log4j.log.target=CONSOLE,FILE,DATABASE,EMAIL,SOCKET 58 log4j.log.target=CONSOLE,FILE 59 log4j.log.encoding=UTF-8 60 log4j.log.layout=org.apache.log4j.PatternLayout 61 log4j.log.layout.pattern=[%d %r] [%-5p] [%t] [%l] [%m]%n 62 # +======================================================================+#
通過以上配置,在項目啟動的時候,會將DEBUG日志信息發送到控制台和文件日志中。
最后,可以在應用程序中采用log4j自帶的debug()、info()、warn()、error()方法來記錄你想要記錄的操作,至於如何存儲日志及日志的目的地發送的工作就交給log4j好了。
最后一點說明的問題:配置較低級別的錯誤日志策略會記錄高級的錯誤信息,配置高級的錯誤日志策略會忽略低級錯誤信息。如將錯誤日志的level配置為debug,則log4j組件會記錄包含debug以上所有的級別日志如debug、info、warn、error、fatal等。加入你配置的為error級別,則不會記錄error以下級別的日志信息如debug、info、warn等等。
原文:http://www.cnblogs.com/liuriqi/p/4039237.html