1. 程式人生 > >log4j

log4j

per com 內容 沒有 cnblogs odi sel war tomcat

美菜POP日誌文檔

一、 日誌使用說明

Log4J的三個組件:

1. Logger:日誌記錄器,負責收集處理日誌記錄 (如何處理日誌)

2. Appender:日誌輸出目的地,負責日誌的輸出 (輸出到什麽 地方)

3. Layout:日誌格式化,負責對輸出的日誌格式化(以什麽形式展現)

一個logger可以對應多個appender,一個appender只能對應一個layout。

1、Logger:

logger可以有選擇的啟動和禁用日誌的輸出,我們經常會在各種框架中看到如:

Java代碼

  1. private static final
    Logger log = LoggerFactory.getLogger(XX.class);

log就代表了一個Logger實例,他的name就是類“XX”的full quailied name(類的全限定名),按照上圖所述,這個log就可以指定多個appender和layout。Logger的名字大小寫敏感,其命名有繼承機制:例如:name為org.apache.commons的logger會繼承name為org.apache的logger。

Log4J中有一個特殊的logger叫做“root”,他是所有logger的根,也就意味著其他所有的logger都會直接或者間接地繼承自root。root logger可以用Logger.getRootLogger()方法獲取。

2、Level(日誌的級別):

level為logger服務,用來定義日誌的級別,他的值可以是:

  1. OFF(關閉)
  2. FATAL(致命的)
  3. ERROR(錯誤)
  4. WARN(警告)
  5. INFO(信息)
  6. DEBUG (調試)
  7. ALL(所有)

輸出日誌的策略由此Level決定,例如:如果logger的Level設置為INFO,那麽系統只輸出INFO以及以上(WARN、ERROR、FATAL)信息。如果當前logger沒有設定Level,那麽它在輸出日誌時采用的策略是:它會使用它繼承的Logger的Level作為它自己的Level來處理。如果它的上級也沒有設置Level,那麽就找上上級,幾次類推,直到root為止,(root的Level是不能設為空的,所以最終一定會找到一個Level)。默認root的Level是INFO,其他logger的Level默認都是null,需要手動指定。

3、Appender(日誌輸出目的地):

Appender可以控制日誌的輸出的目的地,一個輸出源就叫一個Appender,appender的類別有:

  1. Console(控制臺)
  2. File(文件)
  3. JDBC、
  4. JMS

logger可以通過方法logger.addAppender(appender);配置多個appender,對logger來說,每個有效的日誌請求結果都將輸出到logger本身以及父logger的appender上

常用的集中appender有:

org.apache.log4j.ConsoleAppender(控制臺)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)

org.apache.log4j.RollingFileAppender((文件大小到達指定尺寸的時候產生一個新的文件)

org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

4、Layout(日誌記錄格式):

使用指定的Layout來展示(格式化)日誌,常見的Layout有:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以靈活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)

org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

5、配置:

理解了以上幾個組件後,我們就可以了解一下log4j的配置log4j.properties了。

  1. #配置根Logger
  2. log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
  3. #例子:
  4. log4j.rootLogger = DEBUG , stdout ,file
  5. #配置日誌信息輸出目的地(Appender)
  6. log4j.appender.appenderName = fully.qualified.name.of.appender.class
  7. log4j.appender.appenderName.option1 = value1

10.   log4j.appender.appenderName.optionN = valueN

  1. 11.

12. #例子

13. ### 輸出到控制臺 ###

14. log4j.appender.stdout = org.apache.log4j.ConsoleAppender

15. log4j.appender.stdout.Target = System.out #默認就是System.out,另外一個值是System.error

16. log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

17. log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

  1. 18.

19. ### 輸出到文件 ###

20. log4j.appender.file = org.apache.log4j.DailyRollingFileAppender

21. log4j.appender.file.File = logs/log.log

22. log4j.appender.file.Append = true #默認就是true,系統啟動時追加至文件中,否則會覆蓋原有內容

23. log4j.appender.file.Threshold = INFO ## 輸出IFNO級別以上的日誌,這裏的意思是rootLogger設置為DEBUG時,只輸出INFO以上(INFO、WARN、ERROR、FATAL)的信息到文件中去,而DEBUG信息就不會輸出了

24. log4j.appender.file.layout = org.apache.log4j.PatternLayout

25. log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

  1. #配置日誌信息的格式(Layout)
  2. log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  3. log4j.appender.appenderName.layout.option1 = value1
  4. log4j.appender.appenderName.layout.optionN = valueN
  5. #例子
  6. log4j.appender.file.layout = org.apache.log4j.PatternLayout
  7. log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

  1. ConversionPattern參數的格式含義
  2. 格式名 含義
  3. %c 輸出日誌信息所屬的類的全名
  4. %d 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28
  5. %f 輸出日誌信息所屬的類的類名
  6. %l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
  7. %m 輸出代碼中指定的信息,如log(message)中的message
  8. %n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
  9. %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推

10. %r 輸出自應用啟動到輸出該日誌信息所耗費的毫秒數

11. %t 輸出產生該日誌事件的線程名

%-5p代表什麽意思呢?

因為日誌級別分別有error,warn,info,debug,fatal5種,有些是5個字母的,有些是4個字母的,如果直接寫%p就會對不齊,%-5p的意思是日誌級別輸出左對齊,右邊以空格填充,%5p的意思是日誌級別輸出右對齊,左邊以空格填充,附三張圖對比

1、直接%p

技術分享

2、%-5p

技術分享

3、%5p

技術分享

二、公司日誌格式

  • Created by 趙浩博, last modified by 李樣兵 liyangbing on 十月 08, 2016

1.dubbo-log4j配置

#default 
log4j.rootLogger=${mvn.log.root} 
 
#packages 
log4j.logger.org.springframework=WARN 
log4j.logger.org.apache=WARN 
log4j.logger.com.sprucetec=${mvn.log.sprucetec} 
 
#console log 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p - [%t]%l -- %m%n 
 
#adapter log 
log4j.appender.common=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.common.layout=org.apache.log4j.PatternLayout 
log4j.appender.common.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p - [%t]%l -- %m%n 
log4j.appender.common.file=${mvn.log.path}/common.log 
log4j.appender.common.file.threshold=INFO 
log4j.appender.common.append=true 
log4j.appender.common.encoding=UTF-8 
log4j.appender.common.datePattern=‘.‘yyyy-MM-dd‘.log‘

<mvn.log.root>INFO,stdout,common</mvn.log.root> 
<mvn.log.path>/data/log/dmall-bms-admin-web</mvn.log.path> 
<mvn.log.sprucetec>INFO</mvn.log.sprucetec>

2.tomcat-log4j配置

#default 
log4j.rootLogger=${mvn.log.root} 
 
#packages 
log4j.logger.org.springframework=WARN 
log4j.logger.org.apache=WARN 
log4j.logger.com.sprucetec=${mvn.log.sprucetec} 
 
#console log 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p - [%t]%l -- %m%n 
 
#adapter log 
log4j.appender.common=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.common.layout=org.apache.log4j.PatternLayout 
log4j.appender.common.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p - [%t]%l -- %m%n 
log4j.appender.common.file=${mvn.log.path}/common.log 
log4j.appender.common.file.threshold=INFO 
log4j.appender.common.append=true 
log4j.appender.common.encoding=UTF-8 
log4j.appender.common.datePattern=‘.‘yyyy-MM-dd‘.log‘
 
<mvn.log.root>INFO,stdout,common</mvn.log.root> 
<mvn.log.path>/data/log/dmall-bms-admin-web</mvn.log.path> 
<mvn.log.sprucetec>INFO</mvn.log.sprucetec>

3.php-log配置(明雷補充下吧)

日誌文件統一寫到一個文件中,不要按日期建立文件,部署環境會自動切分文件(需要配置linux切分規則)。

三、日誌使用註意事項

1.避免用異常處理邏輯

2.調用外部接口記錄日誌需要記錄出參、入參和返回結果

log4j