log4j.properties配置說明

log4j.properties配置說明

1. log4j配置

# ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF
LOG_LEVEL=INFO
log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE,ERR

# 打印日誌到控制檯
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=utf-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n
log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n

# 打印日誌到文件
log4j.logger.FILE=INFO,FILE
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=${catalina.base}/logs/admin.log
log4j.appender.FILE.Encoding=utf-8
log4j.appender.R.MaxFileSize=100MB
log4j.appender.R.MaxBackupIndex=100
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n

2. LOG_LEVEL的級別說明

  LOG_LEVEL爲日誌的輸出級別,共有7級:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALLhtml

  • off 最高等級,用於關閉全部日誌記錄。
  • fatal 指出每一個嚴重的錯誤事件將會致使應用程序的退出。
  • error 指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。
  • warm 代表會出現潛在的錯誤情形。
  • info 通常和在粗粒度級別上,強調應用程序的運行全程。
  • debug 通常用於細粒度級別上,對調試應用程序很是有幫助。
  • all 最低等級,用於打開全部日誌記錄。

  Log4j只建議使用4個級別,優先級從高到低分別是error,warn,info和debug。若是在使用了info級別的日誌,只會輸出info級別下info、debug等的日誌,warn、error等日誌不會被打印。java

3. appender的日誌輸出方式

  • org.apache.log4j.ConsoleAppender :以控制檯方式輸出日誌
  • org.apache.log4j.FileAppender :以文件形式輸出日誌
  • org.apache.log4j.DailyRollingFileAppender :以天天產生一個日誌文件
  • org.apache.log4j.RollingFileAppende :轉動輸出,當文件達到指定大小產生一個新文件
  • org.apache.log4j.WriterAppender :以流的形式輸出到其它地方

如:輸出到控制檯
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppendersql

4. layout日誌輸出格式說明

  • org.apache.log4j.HTMLLayout :以HTML表格形式佈局
  • org.apache.log4j.PatternLayout :能夠靈活地指定佈局模式
  • org.apache.log4j.SimpleLayout :包含日誌信息的級別和信息字符串
  • org.apache.log4j.TTCCLayout :包含日誌產生的時間、線程、類別等等信息

通常使用PatternLayout,本身配置輸出格式。apache

5. 輸出格式參數說明

Log4J採用相似C語言中的printf函數的打印格式格式化日誌信息app

  • %m 輸出代碼中指定的消息
  • %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
  • %r 輸出自應用啓動到輸出該log信息耗費的毫秒數
  • %c 輸出所屬的類目,一般就是所在類的全名
  • %t 輸出產生該日誌事件的線程名
  • %n 輸出一個回車換行符,Windows平臺爲「\r\n」,Unix平臺爲「\n」
  • %d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy MMM dd HH:mm:ss , SSS},輸出相似:2002年10月18日 22 : 10 : 28 , 921
  • %F 輸出日誌事件的發生位置,包括類目名、發生的線程。舉例:Testlog4.main(TestLog4.java:10)
  • %l 輸出日誌事件的發生位置在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10 )

如:函數

log4j.appender.logRecord.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n
2018-06-25 16:26:40 com.xk.edu.interception.LogRecordInterception@(LogRecordInterception.java:22):pre handle --->>> --->>>---

log4j.appender.logRecord.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} (%L)\:%m%n
2018-06-25 16:30:39 (22):pre handle --->>> --->>>---

log4j.appender.logRecord.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss},%m%n
2018-06-25 16:35:16,pre handle --->>> --->>>---

6. 配置打印異常日誌到一個單獨的文件

把異常單獨打印到一個單獨的文件中,方便查看定位排查問題。
配置以下:佈局

# 保存異常信息到單獨文件
log4j.appender.ERR = org.apache.log4j.DailyRollingFileAppender
# 天天產生一個日誌文件
log4j.appender.ERR.DatePattern='.'yyyy-MM-dd
# 異常日誌文件名
log4j.appender.ERR.File=${catalina.base}/logs/error/adminError.log
log4j.appender.ERR.Append = true
# 是否當即輸出
log4j.appender.ERR.ImmediateFlush=true
log4j.appender.ERR.Encoding=utf-8
# 只輸出ERROR級別以上的日誌!!!
log4j.appender.ERR.Threshold = ERROR
log4j.appender.ERR.layout = org.apache.log4j.PatternLayout
log4j.appender.ERR.layout.ConversionPattern = [%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n

上面配置中產生的error以上級別的日誌會打印到logs/adminError.log中,明天會把今天產生的異常日誌保存一個文件中,名稱是adminError.log + 今天的日期,日期格式是根據log4j.appender.ERR.DatePattern定義的格式。.net

7. 日誌過濾配置

如在6中把error級別以上的日誌打印到異常文件中去了,若是不配置過濾,會在admin.log中打印info以上級別的日誌,那樣就重複打印了error以上級別的日誌。線程

新FILE文件配置以下debug

# 打印日誌到文件,排除error的日誌
log4j.logger.FILE=INFO,FILE
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=${catalina.base}/logs/admin.log
log4j.appender.FILE.Encoding=utf-8
log4j.appender.R.MaxFileSize=100MB
log4j.appender.R.MaxBackupIndex=100
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n
# 不打印warn以上級別的日誌
log4j.appender.FILE.filter.infoFilter = org.apache.log4j.varia.LevelRangeFilter
log4j.appender.FILE.filter.infoFilter.LevelMin=DEBUG
log4j.appender.FILE.filter.infoFilter.LevelMax=WARN

這樣就只在admin.log中打印DEBUG級別到WARN級別的日誌了。

8. 自定義logger的輸出

如:
log4j.logger.com.xk.edu.interception.LogRecordInterception=INFO,logRecord
這樣自定義了一個logger,不使用log4j.rootLogger。自定義的logger之間的日誌是隔離的,如上配置的,只打印LogRecordInterception類下的日誌。
如:
log4j.logger.com.xk.edu.dao=DEBUG
com.edu.dao包下的內容按DEBUG級別輸出,由於dao包下是mapper文件,加上這一個配置就能夠打印sql語句了。

9. 配置文件

如下貼出配置文件:

# ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF
LOG_LEVEL=INFO
log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE,ERR

# 打印日誌到控制檯
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=utf-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n
log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n

# 打印日誌到文件,排除error的日誌
log4j.logger.FILE=INFO,FILE
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=${catalina.base}/logs/admin.log
log4j.appender.FILE.Encoding=utf-8
log4j.appender.R.MaxFileSize=100MB
log4j.appender.R.MaxBackupIndex=100
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n
# 不打印warn以上級別的日誌
log4j.appender.FILE.filter.infoFilter = org.apache.log4j.varia.LevelRangeFilter
log4j.appender.FILE.filter.infoFilter.LevelMin=DEBUG
log4j.appender.FILE.filter.infoFilter.LevelMax=WARN

# 保存異常信息到單獨文件
log4j.appender.ERR = org.apache.log4j.DailyRollingFileAppender
# 天天產生一個日誌文件
log4j.appender.ERR.DatePattern='.'yyyy-MM-dd
# 異常日誌文件名
log4j.appender.ERR.File=${catalina.base}/logs/error/adminError.log
log4j.appender.ERR.Append = true
# 是否當即輸出
log4j.appender.ERR.ImmediateFlush=true
log4j.appender.ERR.Encoding=utf-8
# 只輸出ERROR級別以上的日誌!!!
log4j.appender.ERR.Threshold = ERROR
log4j.appender.ERR.layout = org.apache.log4j.PatternLayout
log4j.appender.ERR.layout.ConversionPattern = [%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n

# 輸出攔截器的日誌, 只輸出LogRecordInterception類下的日誌
log4j.logger.com.xk.edu.interception.LogRecordInterception=INFO,logRecord
log4j.appender.logRecord=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logRecord.Append=true
# 是否當即輸出
log4j.appender.logRecord.ImmediateFlush=true
# 一分鐘產生一個日誌文件
#log4j.appender.logRecord.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.logRecord.DatePattern='.'yyyy-MM-dd
log4j.appender.logRecord.Encoding=utf-8
log4j.appender.logRecord.layout=org.apache.log4j.PatternLayout
log4j.appender.logRecord.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n

# 打印 dao 下的 sql
log4j.logger.com.xk.edu.dao=DEBUG

參考:

http://www.blogjava.net/zJun/archive/2006/06/28/55511.html
https://blog.csdn.net/zxh317162782/article/details/51233704
https://blog.csdn.net/lingfenglangshao/article/details/78334147

相關文章
相關標籤/搜索