log4j + slf4j的maven配置
添加logger的日志輸出,下面是配置信息供備忘
步驟:
1. 在Maven的porn.xml 文件中添加dependency如下
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency>
之后就會添加三個包,
slf4j-api-1.6.1.jar log4j-1.2.17.jar slf4j-log4j12-1.7.2.jar
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. 在代碼中添加
private static final 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的配置信息,在此要感謝前輩提供的資源
log4j輸出格式
- #%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會拋出異常,但還是可以正常初始化。