1. 程式人生 > >slf4j 和 log4j合用的(Maven)配置

slf4j 和 log4j合用的(Maven)配置

簡述:

新增logger的日誌輸出,下面是配置資訊供備忘

步驟:

1. 在Maven的porn.xml 檔案中新增dependency如下

  1. <dependency>
  2.     <groupId>org.slf4j</groupId>
  3.     <artifactId>slf4j-log4j12</artifactId>
  4.     <version>1.7.2</version>
  5. </dependency>

之後就會新增三個包,

2. 之後在專案下新增log4j.properties

專案路徑如下,

log4j.properties

  1. #config root logger  
  2. log4j.rootLogger = INFO,system.out  
  3. log4j.appender.system.out=org.apache.log4j.ConsoleAppender  
  4. log4j.appender.system.out.layout=org.apache.log4j.PatternLayout  
  5. log4j.appender.system.out.layout.ConversionPattern=MINAServer Logger-->%5p{%F:%L}-%m%n  
  6. #config this Project.file logger  
  7. log4j.logger.thisProject.file=INFO,thisProject.file.out  
  8. log4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppender  
  9. log4j.appender.thisProject.file.out.File=logContentFile.log  
  10. log4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout  

3. 在程式碼中新增

  1. privatestaticfinal Logger logger = LoggerFactory.getLogger(MINAServer.class);  

接下來就能輸出了,
  1. logger.info("now {}" , "starting server");  
輸出如下:

如果要輸出logger檔案:

  1. log4j.rootLogger=INFO,R,stdout    
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender    
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  4. log4j.appender.stdout.layout.ConversionPattern=Logger-->%5p{%F:%L}-%m%n   
  5. log4j.appender.R=org.apache.log4j.DailyRollingFileAppender    
  6. log4j.appender.R.File=../logs/log  
  7. log4j.appender.R.layout=org.apache.log4j.PatternLayout  
  8. log4j.appender.R.layout.ConversionPattern=Logger-->%5p{%F:%L}-%m%n   


下面是log4j.properties的配置資訊,在此要感謝前輩提供的資源

#輸出格式
#%m 輸出程式碼中指定的訊息
#%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL
#%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
#%c 輸出所屬的類目,通常就是所在類的全名
#%t 輸出產生該日誌事件的執行緒名
#%n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
#%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
#%l 輸出日誌事件的發生位置,包括類目名、發生的執行緒,以及在程式碼中的行數。舉例:Testlog4.main(TestLog4.Java:10)

格式化例子:
log4j.appender.thisProject.file.out.layout.ConversionPattern=log4j-->%d{yyyy MMM dd HH:mm:ss,SSS}%5p{%F\:%L}-%m%n


注意:

1.資訊格式化的小知識
    這些引數中間可能會參雜一些數字比如:%5p它的意思就是在輸出此引數之前加入多少個空格,還有就是裡面的“\”的作用是轉義字元

2.log4j.properties檔案放置位置
    (1)在Java project專案中,它放置的位置是在專案的根目錄下而不是在專案的src目錄下。
    (2)在javaweb專案中它放置的位置是在src目錄下,因為這個時候tomcat會去預設的載入它的,不需要我們去手動的載入log4j的配置檔案,只需要根據配置獲取自己需要的logger例項即可,由此我們可以知道如果我們使用的不是tomcat容器的話,是不是需要自己手動載入或者至少要配置一下呢?比如使用Websphere等非apache伺服器。

3.對於java web專案裡面的日誌的位置配置
    (1)如果是要指定日誌檔案的位置為D盤下的log.txt檔案。
    log4j.appender.thisProject.file.out.File=d:\\log.txt
    (2)如果指定日誌檔案的位置為當前的tomcat的工作目錄下的某個檔案
    log4j.appender.thisProject.file.out.File=${catalina.home}/logs/logs_tomcat.log

4.log4j的載入機制

    log4j.properties載入機制?其實log4j.properties只是log4j的配置檔案。程式啟動時,log4j元件去讀log4j.properties,和讀取普通配置檔案沒多大區別。獲取使用者配置的一些log4j的屬性值,呼叫想應該的方法為log4j屬性設定。

    把log4j.properties當作一個struts.xml或者一個hibernate-cfg.xml就可以了。但不同的是,log4j不像struts和hibernate,它不是一個獨立的元件,沒法自己完成初始化,一般都是什麼元件需要它 就去初始化。比如,hibernate預設的日誌元件就是log4j,在hibernate初始化的時候它會去初始化log4j。如果你沒配置log4j.properties,hibernate會丟擲異常,但還是可以正常初始化。