slf4j 與log4j 日志管理


log4j簡易入門

復制代碼
package test.log4j;

import org.apache.log4j.Logger;

publicclass HelloLog4j {
privatestaticfinal Logger logger = Logger.getLogger(HelloLog4j.class);
publicstaticvoid main(String[] args) {
logger.debug(
"This is debug message");
logger.info(
"This is info message");
logger.warn(
"This is warn message");
logger.error(
"This is error message");
}
}
復制代碼

log4j簡單配置log4j.properties

復制代碼
#可以設置級別:debug < info < warn < error
#debug: 顯示debug, info, warn, error
#info: 顯示info, warn, error
#warn: 顯示warn, error
#error: 只顯示error
#日志的輸出級別由rootLogger和普通Logger設置的最高級別決定。

#log4j.rootLogger
=debug,appender1
#log4j.rootLogger
=info,appender1
log4j.rootLogger
=warn,appender1
#log4j.rootLogger
=error,appender1

#輸出到控制台
log4j.appender.appender1
=org.apache.log4j.ConsoleAppender
#樣式為TTCCLayout
log4j.appender.appender1.layout
=org.apache.log4j.TTCCLayout

#這里配置的是類所在的包test.log4j, 逗號之前未配置日志輸出級別,默認為根logger的級別
log4j.logger.test.log4j
=, TEST
log4j.appender.TEST
=org.apache.log4j.ConsoleAppender
log4j.appender.TEST.layout
=org.apache.log4j.TTCCLayout
復制代碼

log4j提供的Appender

org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)

log4j提供的Layout

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
復制代碼
Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,打印參數如下: 
  %m 輸出代碼中指定的消息
  
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
  
%r 輸出自應用啟動到輸出該log信息耗費的毫秒數
  
%c 輸出所屬的類目,通常就是所在類的全名
  
%t 輸出產生該日志事件的線程名
  
%n 輸出一個回車換行符,Windows平台為“rn”,Unix平台為“n”
  
%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 221028921
  
%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
復制代碼

以上資料參考:http://www.iteye.com/topic/378077

slf4j簡介

SLF4J不是具體的日志解決方案,它只服務於各種各樣的日志系統。按照官方的說法,SLF4J是一個用於日志系統的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日志系統。

實際上,SLF4J所提供的核心API是一些接口以及一個LoggerFactory的工廠類。從某種程度上,SLF4J有點類似JDBC,不過比JDBC更簡單,在JDBC中,你需要指定驅動程序,而在使用SLF4J的時候,不需要在代碼中或配置文件中指定你打算使用那個具體的日志系統。如同使用JDBC基本不用考慮具體數據庫一樣,SLF4J提供了統一的記錄日志的接口,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過具體日志系統的配置來實現,因此可以在應用中靈活切換日志系統

slf4j簡單示例

復制代碼
package test.slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

publicclass HelloSlf4j {
privatestaticfinal Logger logger = LoggerFactory.getLogger(HelloSlf4j.class);
publicstaticvoid main(String[] args) {
logger.debug(
"This is debug message");
logger.info(
"This is info message");
logger.warn(
"This is warn message");
logger.error(
"This is error message");
}
}
復制代碼

假設使用log4j做為底層日志工具,運行以上程序需要三個包:log4j-1.2.xx.jar、slf4j-api-x.x.x.jar、以及slf4j-log4j12-x.x.x.jar,后兩個包由slf4j提供,包名中的x表示版本號。

獲得logger對象:


java代碼:
  1. private static final Logger logger = LoggerFactory.getLogger(Test.class);  
  2. 輸出日志信息:  
  3. logger.debug(“debug”);  

slf4j中的占位符—不再需要冗長的級別判斷

大家應該還記得,在log4j中,為了提高運行效率,往往在輸出信息之前,還要進行級別判斷,以避免無效的字符串連接操作。如下:
if (logger.isDebugEnabled()){
logger.debug(“debug:“+name);
}
slf4j巧妙的解決了這個問題:先傳入帶有占位符的字符串,同時把其他參數傳入,在slf4j的內容部實現中,如果級別合適再去用傳入的參數去替換字符串中的占位符,否則不用執行。
logger.info("{} is {}", new String[]{“x",“y"});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM