已經完結的工程中用到了log4j,抽時間寫一篇日誌記錄下。java
//參考文章以下web
http://it.oyksoft.com/log4j/spring
1、log4j是什麼?有什麼用?sql
Log4j是一個日誌記錄工具,基於java語言的。咱們能夠將日誌信息輸出到目的地(eg:控制檯、某處文件夾等)。apache
2、log4j的日誌等級tomcat
級別由低到高爲 debug < info < warn < error < fatalapp
其詳細對應的描述請參考百度百科。webapp
3、log4j配置方法工具
有三種方法來配置log4j:1>經過.properties文件(我作的項目都採用這種方式);2>經過xml文件;3>經過java代碼。佈局
不管採用上述哪一種方法,咱們均可以定義log4j的三個主要組件:logger、appender和layout。詳細介紹三個組件:
1>Logger,它是記錄器,負責記錄處理日誌的大部分操做。
配置語法爲
log4j.rootLogger=[level],appenderName1,appenderName2,......
級別如上已經介紹,appenderName是指日誌輸出地名稱,同時能夠指定多個輸出目的地。
2>Appender,它是日誌文件輸出地,它負責記錄日誌操做的輸出。
配置語法爲
log4j.appender.appenderName = xxxx
log4j.appender.appenderName.option1 = value1
......
log4j.appender.appenderName.optionN = valueN
注意:如上的appenderName爲1>中定義的名稱,能夠任意起名稱。
log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(輸出到控制檯)
org.apache.log4j.FileAppender(輸出到文件)
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件)
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
舉個例子:log4j.appender.stdout = org.apache.log4j.ConsoleAppender
解釋:定義一個名爲stdout的輸出目的地,輸出到控制檯。
3>Layout,它負責格式化Appender的輸出
其語法爲
log4j.appender.appenderName.layout = xxxx
log4j.appender.appenderName.layout.option1 = value1
......
log4j.appender.appenderName.layout.optionN = valueN
注意:log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.PatternLayout(靈活地指定佈局模式)--這種用得最多
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
4、示例詳解
以下是我配置的log4j.properties文件
#指定日誌級別爲DEBUG,所以級別高於debug的info < warn < error < fatal都會被輸出來 #指定日誌輸出地名稱:stdout、D和E log4j.rootLogger=DEBUG, stdout, D, E #以下設置個人工程中哪些可能會出現bug的地方 #zhiji.caren.mapper是我工程下的某個文件夾 log4j.logger.com.zhiji.caren.mapper=DEBUG #以下配置sql出現bug的地方 log4j.logger.java.sql.Connection = DEBUG log4j.logger.java.sql.Statement = DEBUG log4j.logger.java.sql.PreparedStatement = DEBUG log4j.logger.java.sql.ResultSet = DEBUG #以下是配置stdout輸出地 #名爲stdout的輸出類型爲控制檯 log4j.appender.stdout = org.apache.log4j.ConsoleAppender #Target=System.out,輸出到控制檯 log4j.appender.stdout.Target = System.out #指定佈局模式 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout #指定輸出打印信息的具體格式 log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n # 以下是配置D輸出地 #指定輸出地爲文件 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender #文件的路徑爲該項目根目錄下的/WEB-INF/logs/debug.log #修改於2016/03/17。注意webapp.root要改成web.xml裏面webAppRootKey的值 //log4j.appender.D.File = ${webapp.root}/WEB-INF/logs/debug.log log4j.appender.D.File = ${caren.root}/WEB-INF/logs/debug.log #DatePattern="."yyyy-MM意思:每個月滾動一第二天志文件,即每個月產生一個新的日誌文件。 #當前月的日誌文件名爲debug.log4j,前一個月的日誌文件名爲debug.log4j.yyyy-MM。 log4j.appender.D.DatePattern = "."yyyy-MM #Append = true意思:將消息增長到指定文件中,false指將消息覆蓋指定的文件內容。 log4j.appender.D.Append = true #Threshold=DEBUG:指定日誌消息的輸出最低層次。 log4j.appender.D.Threshold = DEBUG #指定佈局模式 log4j.appender.D.layout = org.apache.log4j.PatternLayout #指定輸出打印信息的具體格式 log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n # 以下是配置E輸出地 --詳細介紹參考D介紹 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File = ${webapp.root}/WEB-INF/logs/error.log log4j.appender.E.Append = true log4j.appender.E.DatePattern = "."yyyy-MM log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
備註:若是將多個工程都掛在一個tomcat下時,且這些工程都配了log4j時,這時會報錯webAppRootkey的惟一性問題,所以,這裏配置webapp.root時,最好是配成 本身的項目名稱.root,這樣,log4j文件就會產生在各自項目/WEB-INF/logs/xx.log下。
web.xml裏面log4j的配置
<!-- Log4j 配置 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>caren.root</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>10000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
注意:webAppRootkey配置的時候,最好是配成 項目名稱.root形式,而後對應的log4j.properties文件裏面的webapp.root也應該修改爲 項目名稱.root。