首頁 > 軟體

Log4j組態檔及nutch中的紀錄檔設定

2020-06-16 18:05:13

使用SLF4J作為紀錄檔系統時,由於SLF4J只是一個介面,它需要一個具體實現來執行。

具體參考 http://www.linuxidc.com/Linux/2015-03/114636.htm


由於slf4j統一了API介面,因此,若log4j實現來紀錄檔輸出,則只需要設定組態檔的內容即可,log4j.properties中的設定可以分成2類:

第一類定義了紀錄檔的輸出級別,以及以輸出目標(appender)

第二類定義了appender的具體屬性。

一、紀錄檔輸出級別、輸出目標(appender)的定義

1、log4j.rootLogger=紀錄檔級別,appender1, appender2, ….
範例:log4j.rootLogger=INFO,stdout,DRFA
(1)設定整個工程的紀錄檔預設級別,以及紀錄檔的輸出目標
(2)紀錄檔級別為ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF,不區分大小寫。範例中的紀錄檔級別為INFO,即只有大於或者等於INFO的紀錄檔才會被記錄。
(3)紀錄檔的輸出目標有以下幾類:

ConsoleAppender(控制台)
FileAppender(檔案)
DailyRollingFileAppender(每天產生一個紀錄檔檔案
RollingFileAppender(檔案大小到達指定尺寸時產生一個新的檔案)
WriteAppender(將紀錄檔資訊以流格式傳送到任意指定的地方)
JDBCAppender(將紀錄檔資訊儲存到資料庫中)
範例中使用的是DailyRollingFileAppender。下一部分會詳細介紹每個appender中的具體屬性。

2、log4j.logger.org.mypackage[.MyClass]=紀錄檔級別,appender1, appender2, ….
範例:log4j.logger.org.apache.nutch.crawl.GeneratorJob=INFO,cmdstdout
(1)log4j.rootLogger 中的設定對整個工程生效,若只想對某個包或者某個類生效,可以使用本設定項。

3、log4j.threshold=ALL
In fact , threshold's level should be larger or equals rootlogger's level.
usually, thresold can be used to define some special appender's filter log level.
eg:
there are two appenders: console and file,and the level is warn, if you just only want the error message be written to file, so you can use "file.threshold=error" to filter out the "warn" message.

二、具體某個appender的設定
1、log4j.appender.appender1.File=檔案目錄及檔案
2、log4j.appender.appender1.MaxFileSize=最大檔案大小
3、log4j.appender.appender1.MaxBackupIndex=備份檔案個數

  其中,appender1是在log4j.rootlogger或者具體包紀錄檔中定義過的;
    檔案目錄及檔案,例如,/home/admin/logs/hutudan.log
    最大檔案大小,例如,100KB
    備份檔案個數,例如,1

4、log4j.appender.ServerDailyRollingFile.DatePattern=紀錄檔字尾格式

    例如,'.'yyyy-MM-dd

5、log4j.appender.appender1.layout=org.apache.log4j.紀錄檔布局格式

    HTMLLayout(以HTML表格形式布局)
    SimpleLayout(包含紀錄檔資訊的級別和資訊字串)
    TTCCLayout(包含紀錄檔產生的時間,執行緒,類別等資訊)
    PatternLayout(可以靈活的指定布局格式,常用)

6、log4j.appender.appender1.layout.ConversionPattern=紀錄檔輸出格式

    例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
    %c 輸出紀錄檔資訊所屬的類的全名
    %d 輸出紀錄檔時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy-M-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28
    %f 輸出紀錄檔資訊所屬的類的類名
    %l 輸出紀錄檔事件的發生位置,即輸出紀錄檔資訊的語句處於它所在的類的第幾行
    %m 輸出程式碼中指定的資訊,如log(message)中的message
    %n 輸出一個回車換行符,Windows平台為“rn”,Unix平台為“n”
    %p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL。如果是呼叫debug()輸出的,則為DEBUG,依此類推
    %r 輸出自應用啟動到輸出該紀錄檔資訊所耗費的毫秒數
    %t 輸出產生該紀錄檔事件的執行緒名

7、log4j.appender.ServerDailyRollingFile.Append=true

在後面追加

三、範例:Nutch中的log4j.properties

# Define some default values that can be overridden by system properties
Hadoop.log.dir=.
hadoop.log.file=hadoop.log

# RootLogger - DailyRollingFileAppender
log4j.rootLogger=INFO,DRFA

# Logging Threshold
log4j.threshold=ALL

#special logging requirements for some commandline tools
log4j.logger.org.apache.nutch.crawl.Crawl=INFO,cmdstdout
log4j.logger.org.apache.nutch.crawl.InjectorJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.host.HostInjectorJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.crawl.GeneratorJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.crawl.DbUpdaterJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.host.HostDbUpdateJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.fetcher.FetcherJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.parse.ParserJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.indexer.IndexingJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.indexer.DeleteDuplicates=INFO,cmdstdout
log4j.logger.org.apache.nutch.indexer.CleaningJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.crawl.WebTableReader=INFO,cmdstdout
log4j.logger.org.apache.nutch.host.HostDbReader=INFO,cmdstdout
log4j.logger.org.apache.nutch.parse.ParserChecker=INFO,cmdstdout
log4j.logger.org.apache.nutch.indexer.IndexingFiltersChecker=INFO,cmdstdout
log4j.logger.org.apache.nutch.plugin.PluginRepository=WARN
log4j.logger.org.apache.nutch.api.NutchServer=INFO,cmdstdout

log4j.logger.org.apache.nutch=INFO
log4j.logger.org.apache.hadoop=WARN
log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.gora=WARN

#
# Daily Rolling File Appender
#

log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}

# Rollver at midnight
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

# 30-day backup
#log4j.appender.DRFA.MaxBackupIndex=30
log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout

# Pattern format: Date LogLevel LoggerName LogMessage
log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
# Debugging Pattern format: Date LogLevel LoggerName (FileName:MethodName:LineNo) LogMessage
#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n


#
# stdout
# Add *stdout* to rootlogger above if you want to use this
#

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n

#
# plain layout used for commandline tools to output to console
#
log4j.appender.cmdstdout=org.apache.log4j.ConsoleAppender
log4j.appender.cmdstdout.layout=org.apache.log4j.PatternLayout
log4j.appender.cmdstdout.layout.ConversionPattern=%m%n

基本步驟如下:
1、指定log4j.rootLogger

log4j.rootLogger=INFO,DRFA

【可選】為單獨某個包或者類指定紀錄檔級別及appender

#special logging requirements for some commandline tools
log4j.logger.org.apache.nutch.crawl.Crawl=INFO,cmdstdout
log4j.logger.org.apache.nutch.crawl.InjectorJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.host.HostInjectorJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.crawl.GeneratorJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.crawl.DbUpdaterJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.host.HostDbUpdateJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.fetcher.FetcherJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.parse.ParserJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.indexer.IndexingJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.indexer.DeleteDuplicates=INFO,cmdstdout
log4j.logger.org.apache.nutch.indexer.CleaningJob=INFO,cmdstdout
log4j.logger.org.apache.nutch.crawl.WebTableReader=INFO,cmdstdout
log4j.logger.org.apache.nutch.host.HostDbReader=INFO,cmdstdout
log4j.logger.org.apache.nutch.parse.ParserChecker=INFO,cmdstdout
log4j.logger.org.apache.nutch.indexer.IndexingFiltersChecker=INFO,cmdstdout
log4j.logger.org.apache.nutch.plugin.PluginRepository=WARN
log4j.logger.org.apache.nutch.api.NutchServer=INFO,cmdstdout

log4j.logger.org.apache.nutch=INFO
log4j.logger.org.apache.hadoop=WARN
log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.gora=WARN

因此,nutch相關的包大多數紀錄檔均被重新指定了指向cmdstdout,而其它紀錄檔,如hadoop, zookeeper, gora只是重新定義了紀錄檔級別,而未重新定義appender,因此它們紀錄檔將被指向DRFA。

【可選】指定threshold

 # Logging Threshold
log4j.threshold=ALL

2、指定某個appender的屬性

cmstd:

#
# plain layout used for commandline tools to output to console
#
log4j.appender.cmdstdout=org.apache.log4j.ConsoleAppender
log4j.appender.cmdstdout.layout=org.apache.log4j.PatternLayout
log4j.appender.cmdstdout.layout.ConversionPattern=%m%n

%m 輸出程式碼中指定的資訊,如log(message)中的message
%n 輸出一個回車換行符,Windows平台為“rn”,Unix平台為“n

DRFA:

#
# Daily Rolling File Appender
#

log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}

# Rollver at midnight
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

# 30-day backup
#log4j.appender.DRFA.MaxBackupIndex=30
log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout

# Pattern format: Date LogLevel LoggerName LogMessage
log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
# Debugging Pattern format: Date LogLevel LoggerName (FileName:MethodName:LineNo) LogMessage
#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n

輸出檔案可以用變數指定,如上面的:

log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}

Log4j設定詳解 http://www.linuxidc.com/Linux/2014-10/108401.htm

Apache Log4j 2 更多內容請看: http://logging.apache.org/log4j/2.x/

Log4j入門使用教學 http://www.linuxidc.com/Linux/2013-06/85223.htm

Log4j 紀錄檔詳細用法 http://www.linuxidc.com/Linux/2014-09/107303.htm

Hibernate設定Log4j顯示SQL引數 http://www.linuxidc.com/Linux/2013-03/81870.htm

Log4j學習筆記(1)_Log4j 基礎&設定項解析 http://www.linuxidc.com/Linux/2013-03/80586.htm

Log4j學習筆記(2)_Log4j設定範例&Spring整合Log4j http://www.linuxidc.com/Linux/2013-03/80587.htm


IT145.com E-mail:sddin#qq.com