我想添加日誌記錄到我正在開發的應用程序,使用apache log4j。在這一點上,我想重定向所有級別INFO的日誌消息,並且將(TRACE,DEBUG)的所有日誌消息重定向到標準輸出以及WARN和以上(錯誤,致命)的所有其他日誌消息到stderr。 例如:記錄錯誤到stderr和調試,信息到標準輸出log4j
...
logger.info("Processing at some point"); // must be written to stdout
logger.debug("Point x was processed"); // must be written to stdout
logger.warn("Incorrect point config"); // must be written only to stderr
logger.error("Exception occurred at point x"); // must be written only to stderr
那麼應該怎麼我的log4j.properties文件?它在這裏是怎樣看待這個momment:
log4j.rootLogger=DEBUG, stdout, stderr
# configure stdout
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
# configure stderr
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stderr = org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Threshold = WARN
log4j.appender.stderr.Target = System.err
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
具有上述配置的問題是,logger.error()...在標準輸出打印了。
謝謝你的快速回復。是否有任何方法來繼承appender(例如stdout appender),所以當INFO以上的日誌會被拒絕?過濾器怎麼樣:爲stdout設置一個過濾器,以便只接受TRACE,DEBUG,INFO的日誌? – Elvis
絕對如此。您可以創建自己的appender並在配置文件中指向它。 –
這裏是一個示例(在xml配置中)http://stackoverflow.com/questions/4825072/how-to-set-filter-in-the-log4j-xml,因此與以下示例相同:log4j.appender.stdout。 Filter = org.apache.varia.LevelRangeFilter log4j.appender.stdout.Filter.LevelMax = INFO log4j.appender.stdout.Filter.LevelMin = TRACE?如果是這樣,它似乎不適用於我的情況。 log4j引發了一個警告消息,告訴過濾器不能被設置... – Elvis