Java --log4j.properties詳解

已經完結的工程中用到了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。

相關文章
相關標籤/搜索