slf4j 和 log4j合用的(Maven)配置
簡述:
新增logger的日誌輸出,下面是配置資訊供備忘
步驟:
1. 在Maven的porn.xml 檔案中新增dependency如下
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.7.2</version>
- </dependency>
之後就會新增三個包,
2. 之後在專案下新增log4j.properties
專案路徑如下,
log4j.properties
- #config root logger
- log4j.rootLogger = INFO,system.out
- log4j.appender.system.out=org.apache.log4j.ConsoleAppender
- log4j.appender.system.out.layout=org.apache.log4j.PatternLayout
-
log4j.appender.system.out.layout.ConversionPattern=MINAServer Logger-->%5p{%F:%L}-%m%n
- #config this Project.file logger
- log4j.logger.thisProject.file=INFO,thisProject.file.out
- log4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.thisProject.file.out.File=logContentFile.log
-
log4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout
3. 在程式碼中新增
- privatestaticfinal Logger logger = LoggerFactory.getLogger(MINAServer.class);
接下來就能輸出了,
- logger.info("now {}" , "starting server");
如果要輸出logger檔案:
- log4j.rootLogger=INFO,R,stdout
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=Logger-->%5p{%F:%L}-%m%n
- log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.R.File=../logs/log
- log4j.appender.R.layout=org.apache.log4j.PatternLayout
- 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會丟擲異常,但還是可以正常初始化。