SLF4J和log4j的整合使用
概念
??? SLF4J:即簡單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務于各種各樣的日志系統(tǒng)。按照官方的說法,SLF4J是一個用于日志系統(tǒng)的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日志系統(tǒng)。
??? 在使用SLF4J的時候,不需要在代碼中或配置文件中指定你打算使用那個具體的日志系統(tǒng),SLF4J提供了統(tǒng)一的記錄日志的接口,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過具體日志系統(tǒng)的配置來實現(xiàn),因此可以在應用中靈活切換日志系統(tǒng)。
?? 官方網(wǎng)站:http://www.slf4j.org/
??? log4j:Log For Java,Apache的一個開源項目,可以靈活地記錄日志信息,我們可以通過Log4j的配置文件靈活配置日志的記錄格式、記錄級別、輸出格式,而不需要修改已有的日志記錄代碼。
??? 官方網(wǎng)站:http://logging.apache.org/log4j/1.2/
使用介紹
????? maven構(gòu)建項目,pom.xml添加代碼:
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.0.1</version> </dependency>??? 下面是一個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=FATALlog4j.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(每天產(chǎn)生一個日志文件),org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產(chǎn)生一個新的文件)org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
- 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(包含日志產(chǎn)生的時間、線程、類別等等信息)
?
- log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n
?如果使用pattern布局就要指定的打印信息的具體格式ConversionPattern,打印參數(shù)如下:%m 輸出代碼中指定的消息;%M 輸出打印該條日志的方法名;%p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,FATAL;%r 輸出自應用啟動到輸出該log信息耗費的毫秒數(shù);%c 輸出所屬的類目,通常就是所在類的全名;%t 輸出產(chǎn)生該日志事件的線程名;%n 輸出一個回車換行符,Windows平臺為"rn”,Unix平臺為"n”;%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2002-10-18 22:10:28,921;%l 輸出日志事件的發(fā)生位置,及在代碼中的行數(shù);[QC]是log信息的開頭,可以為任意字符,一般為項目簡稱。輸出示例[TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'
使用步驟(這個是直接添加jar包,上面是maven引入jar)
第一步:在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配置文件,具體內(nèi)容參照上面的示例。
?
第三步:在項目的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("測試:{}", "輸出日志");?
第五步:啟動并運行項目。總結(jié)
以上是生活随笔為你收集整理的SLF4J和log4j的整合使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: slf4j介绍及配置详解
- 下一篇: slf4j+log4j2的整合配置