SLF4J官網:http://www.slf4j.org/
SLF4J的作用通俗點講,就是可以讓我們的項目以最小的代價更換不同的日志系統。無需修改代碼,只需要添加、刪除相應的jar包和配置文件。
1.添加”slf4j-api-xxx.jar”到項目中。(xxx代表版本號,本文用的是1.7.7版本)
2.建個項目,編寫幾句簡單的日志記錄的代碼。
//import org.apache.log4j.PRopertyConfigurator;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class test_slf4j {public static void main(String[] args) {// PropertyConfigurator.configure("log4j.properties");Logger logger = LoggerFactory.getLogger(test_slf4j.class);logger.trace("I'm trace log.");logger.debug("I'm debug log.");logger.info("I'm info log.");logger.warn("I'm warn log.");logger.error("I'm error log.");}}
3.下載的SLF4J壓縮包里自帶了很多的日志系統,體驗一下幾個常用的。
【Simple】先來用一下簡單日志,添加”slf4j-simple-xxx.jar”到項目中。
然后直接運行上面的代碼,控制臺輸出結果:
[main] INFO test_slf4j - I'm info log.[main] WARN test_slf4j - I'm warn log.[main] ERROR test_slf4j - I'm error log.
貌似因為沒有自定義配置文件,默認配置把trace和debug級別的日志給過濾了。
【JDK】再來試試jdk自帶的日志系統,刪除”slf4j-simple-xxx.jar”,添加”slf4j-jdk14-xxx.jar”到項目中。 注意:項目中不能有多個日志系統,否則SLF4J因為不知道用哪個會報錯。
然后直接運行上面的代碼,控制臺輸出結果:
八月 30, 2014 12:44:12 下午 test_slf4j main信息: I'm info log.八月 30, 2014 12:44:13 下午 test_slf4j main警告: I'm warn log.八月 30, 2014 12:44:13 下午 test_slf4j main嚴重: I'm error log.
結果和簡單日志差不多,除了日志格式不同,多了日志記錄時間,也是被過濾了trace和debug級別的日志。
【Log4j】上面的日志內容實在是過于簡單,對我們實際開發可以說是作用甚微。日志文件當然是越詳細越好,尤其是在修復BUG時,能夠準確的定位到哪一行代碼是極好的。 來試一下大家常用的Log4j,刪除其他日志系統的jar包,添加”slf4j-log4j12-xxx.jar”,還需添加一個Log4j1.2版本的jar包,去Log4j的官網上下載一個。現在Log4j1已經停止更新,Log4j2說是比1提升非常多。我一開始用SLF4J + Log4j2,但是一直不成功。網上的資料也不多,等回頭有時間研究一下再寫一篇SLF4J + Log4j2的文章,這里我用的是SLF4J-1.7.7 + Log4j-1.2.17。
添加了需要的jar包,還需添加Log4j的配置文件”log4j.properties”。
我配置的log4j.properties具有三種Logger。 Console:控制臺輸出DEBUG級別以上的日志。 LogFile:文本記錄INFO級別以上的日志,文件最大不超過2MB。 ErrorFile:文件記錄ERROR級別以上的日志,以日期格式命名文件,如“error.log.2014-08-01”、“error.log.2014-08-02”。
# Set log levels #log4j.rootLogger = DEBUG, Console, LogFile, ErrorFile# Output the log info to the java Console #log4j.appender.Console = org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Target = System.outlog4j.appender.Console.Threshold = DEBUGlog4j.appender.Console.layout = org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern = <%-d{yyyy-MM-dd HH:mm:ss}> <%t> %l %n<%p> %m%n%n# Save the log info to the log file #log4j.appender.LogFile = org.apache.log4j.RollingFileAppenderlog4j.appender.LogFile.File = logs/log.loglog4j.appender.LogFile.Append = truelog4j.appender.LogFile.MaxFileSize = 2MBlog4j.appender.LogFile.MaxBackupIndex = 100log4j.appender.LogFile.Threshold = INFOlog4j.appender.LogFile.layout = org.apache.log4j.PatternLayoutlog4j.appender.LogFile.layout.ConversionPattern = <%-d{yyyy-MM-dd HH:mm:ss}> <%t> %l %n<%p> %m%n%n# Save the error info to the error file. A file one day. #log4j.appender.ErrorFile = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.ErrorFile.File = logs/error.loglog4j.appender.ErrorFile.Append = truelog4j.appender.ErrorFile.Threshold = ERRORlog4j.appender.ErrorFile.layout = org.apache.log4j.PatternLayoutlog4j.appender.ErrorFile.layout.ConversionPattern = <%-d{yyyy-MM-dd HH/:mm/:ss}> <%t> %l %n<%p> %m%n%n
在src根目錄下創建“log4j.properties”,Log4j在啟動時會默認尋找這個配置文件。如果你將配置文件放在其他地方,可以用上面注釋掉的代碼先加載指定的配置文件,支持絕對路徑和相對路徑。 還是直接運行上面的代碼,控制臺輸出結果:
<2014-08-30 13:17:03> <main> test_slf4j.main(test_slf4j.java:17) <DEBUG> I'm debug log.<2014-08-30 13:17:03> <main> test_slf4j.main(test_slf4j.java:18) <INFO> I'm info log.<2014-08-30 13:17:03> <main> test_slf4j.main(test_slf4j.java:19) <WARN> I'm warn log.<2014-08-30 13:17:03> <main> test_slf4j.main(test_slf4j.java:20) <ERROR> I'm error log.
我配置的log4j.rootLogger = DEBUG,所以trace沒有被輸出。去查看兩個日志文件,也成功記錄了相應的日志。
新聞熱點
疑難解答