概念
SLF4J:即簡單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務於各種各樣的日志系統。按照官方的說法,SLF4J是一個用於日志系統的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日志系統。
在使用SLF4J的時候,不需要在代碼中或配置文件中指定你打算使用那個具體的日志系統,SLF4J提供了統一的記錄日志的接口,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過具體日志系統的配置來實現,因此可以在應用中靈活切換日志系統。
log4j:Log For Java,Apache的一個開源項目,可以靈活地記錄日志信息,我們可以通過Log4j的配置文件靈活配置日志的記錄格式、記錄級別、輸出格式,而不需要修改已有的日志記錄代碼。
官方網站:http://logging.apache.org/log4j/1.2/
使用介紹
下面是一個log4j配置示例:
# 日志輸出級別(INFO)和輸出位置(stdout,R) log4j.rootLogger=INFO, stdout , R # 日志輸出位置為控制台 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n # 日志輸出位置為文件 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n # 定義相應包路徑下的日志輸出級別 log4j.logger.com.alibaba=DEBUG log4j.logger.com.opensymphony.oscache=ERROR log4j.logger.org.springframework=DEBUG log4j.logger.com.ibatis.db=WARN log4j.logger.org.apache.velocity=FATAL log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN log4j.logger.org.hibernate=DEBUG log4j.logger.org.logicalcobwebs=WARN
說明:
- log4j.rootCategory=INFO, stdout , R
此句為將等級為INFO的日志信息輸出到stdout和R這兩個目的地,stdout和R的定義在下面的代碼,可以任意起名。等級可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF則不打出任何信息,如果配置為INFO這樣只顯示INFO, WARN, ERROR的log信息,而DEBUG信息不會被顯示,具體講解可參照第三部分定義配置文件中的logger。
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
此句為定義名為stdout的輸出端是哪種類型,可以是org.apache.log4j.ConsoleAppender(控制台),org.apache.log4j.FileAppender(文件),org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
此句為定義名為stdout的輸出端的layout是哪種類型,可以是org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以靈活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
- log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n
如果使用pattern布局就要指定的打印信息的具體格式ConversionPattern,打印參數如下:%m 輸出代碼中指定的消息;%M 輸出打印該條日志的方法名;%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL;%r 輸出自應用啟動到輸出該log信息耗費的毫秒數;%c 輸出所屬的類目,通常就是所在類的全名;%t 輸出產生該日志事件的線程名;%n 輸出一個回車換行符,Windows平台為"rn”,Unix平台為"n”;%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2002-10-18 22:10:28,921;%l 輸出日志事件的發生位置,及在代碼中的行數;[QC]是log信息的開頭,可以為任意字符,一般為項目簡稱。輸出示例[TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'
使用步驟
第一步:在JavaWeb項目中使用SLF4J和LOG4J,需要在項目中添加下面三個jar包
1、log4j-1.2.x.jar
2、slf4j-api-1.x.x.jar
3、slf4j-log4j12-1.x.x.jar
x-具體版本號
第二步:在項目類路徑下添加log4j.properties配置文件,具體內容參照上面的示例。
第三步:在項目的web.xml配置文件中添加加載log4j的配置
<!-- log4j配置文件位置 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <!-- 利用spring來使用log4j --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
第四步:在需要輸出日志的類中添加slf4j的logger實例對象:
// 導入slf4j類 import org.slf4j.Logger; import org.slf4j.LoggerFactory; // 添加slf4j日志實例對象 final static Logger logger = LoggerFactory.getLogger(Test.class); // 輸出日志 logger.info("測試:{}", "輸出日志");
第五步:啟動並運行項目。
<END>