1. 程式人生 > >用slf4j統一管理日誌總結

用slf4j統一管理日誌總結

slf4j統一管理日誌總結

一.使用slf4j統一管理並配置統一使用log4j日誌

使用的jarslf4j-api-1.7.5.jarjcl-over-slf4j-1.7.5.jarjul-to-slf4j-1.7.5.jarslf4j-log4j12-1.7.5.jarlog4j-1.2.12.jar

因為專案中多個框架使用不同的日誌或者現在修改以前專案中的日誌框架改用另一種日誌,所以使用slf4j統一管理日誌會比較方便。

1.slf4j是一個介面標準。

2.jcl-over-slf4j-1.7.5.jarjul-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.jarslf4j介面的實現,是一個slf4jlog4j的轉換層,將以slf4j的管理的日誌轉為log4j

4.log4j-1.2.12.jar

log4j日誌的jar

#將等級為INFO的日誌資訊輸出到File(名字任意與定義時保持一致即可)目的地

#可以填寫多個目的地

#等級可分為OFFFATALERRORWARNINFODEBUGTRACEALL(優先順序依次遞減)

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=falselog只打印到本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 =

#使用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.jarslf4j-log4j12-1.7.5.jar

2、刪除配置檔案log4j.properties

3、匯入jarlog4j-over-slf4j-1.7.5.jarlogback-access-1.0.13.jarlogback-classic-1.0.13.jarlogback-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