用slf4j統一管理日誌總結
一.使用slf4j統一管理並配置統一使用log4j日誌
使用的jar:(slf4j-api-1.7.5.jar,jcl-over-slf4j-1.7.5.jar,jul-to-slf4j-1.7.5.jar,slf4j-log4j12-1.7.5.jar,log4j-1.2.12.jar)
因為專案中多個框架使用不同的日誌或者現在修改以前專案中的日誌框架改用另一種日誌,所以使用slf4j統一管理日誌會比較方便。
1.slf4j是一個介面標準。
2.jcl-over-slf4j-1.7.5.jar,jul-to-slf4j-1.7.5.jar是將以前jcl jul日誌橋接到slf4j上並由slf4j管理。
備註:對於jul-to-slf4j-1.7.5.jar的使用應該在application初始化時加入程式碼(移除之前存在的handle,安裝SLF4JBridgeHandler):
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
3.slf4j-log4j12-1.7.5.jar是slf4j介面的實現,是一個slf4j到log4j的轉換層,將以slf4j的管理的日誌轉為log4j
4.log4j-1.2.12.jar是log4j日誌的jar
5.然後配置一個log4j的配置檔案:log4j.properties
#將等級為INFO的日誌資訊輸出到File(名字任意與定義時保持一致即可)目的地
#可以填寫多個目的地
#等級可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL(優先順序依次遞減)
log4j.rootLogger =INFO,File
#此為hibernate的包中類的等級,以及選擇其資訊輸出端(可選的輸出端要定義)
#log4j.logger.org.hibernate.tool.hbm2ddl=INFO,File
#log4j.logger.org.hibernate.jdbc=DEBUG,File
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE,File
#log4j.logger.org.hibernate.type.descriptor.sql.BasicExtractor=DEBUG,File
log4j.logger.org.hibernate.SQL=TRACE,File
# log4j.additivity.bao.leiming=false是log只列印到本log的輸出端中
#不再列印到其父logger的輸出端,防止日誌資訊列印多次
log4j.additivity.org.hibernate.SQL=false
#log4j.logger.org.hibernate.engine.QueryParameters=TRACE,File
#log4j.logger.org.hibernate.engine.query.HQLQueryPlan=DEBUG,File
log4j.additivity.org.hibernate.type.descriptor.sql.BasicBinder=false
#定義名為File(名字可以任意)的日誌輸出端的型別此為每天產生一個日誌
log4j.appender.File=org.apache.log4j.DailyRollingFileAppender
#定義名為File的輸出端檔名
log4j.appender.File.file =c:/logs/tomcat.
log4j.appender.File.encoding =UTF-8
log4j.appender.File.datePattern ='.'yyyy-MM-dd'.log'
#定義名為File的輸出端的layout的型別,此處PatternLayout為可以靈活的指定佈局模式
log4j.appender.File.layout =org.apache.log4j.PatternLayout
#使用PatternLayout,此處要指定列印資訊的具體格式
log4j.appender.File.layout.conversionPattern=%d[%t]%-5p%c-%m%n
log4j.appender.File.append =true
#與上述雷同,此處為定義名為stdout的日誌輸出端型別
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss,SSS}[%c]-[%p]%m%n
這樣就可以在在專案中使用slf4j統一的介面寫日誌了(假設在名為Aa類)
//logger的名字見配置檔案,如果沒有就繼承父,如果沒父就繼承rootLogger
final Logger logger = LoggerFactory.getLogger("logger的名字");
logger.debug("Thisis debug message");
logger.info("This is infomessage");
logger.warn("This is warnmessage");
logger.error("This is errormessage");
即使以後跟換日誌框架(例如不使用log4j而改使用logback)都很方便。
舉例:原先專案使用slf4j統一管理使用log4j而現在改使用logback
步驟:
1、刪除log4j-1.2.12.jar、slf4j-log4j12-1.7.5.jar
2、刪除配置檔案log4j.properties
3、匯入jar包:log4j-over-slf4j-1.7.5.jar、logback-access-1.0.13.jar、logback-classic-1.0.13.jar、logback-core-1.0.13.jar
4、增加logback-1.0.13配置檔案logback.xml
即可
不需要修改專案之前的程式碼,只要更換jar包和相應日誌的配置檔案即可
重新回顧一遍。2016年12月15號
補充參考網址:
http://phl.iteye.com/blog/2021461
http://www.tuicool.com/articles/IfeUfq
http://blog.csdn.NET/xianymo/article/details/51026663