我想使用 apache log4j 向我正在开发的应用程序添加日志记录。此时,我想将 INFO 级别和更低级别(TRACE、DEBUG)的所有日志消息重定向到 stdout,并将 WARN 和更高级别(ERROR、FATAL)的所有其他日志消息重定向到 stderr。例如:
...
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 文件应该是什么?这是它现在的样子:
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() … 也在标准输出中打印。
原文由 Elvis 发布,翻译遵循 CC BY-SA 4.0 许可协议
Per Jon Skeet 在 Post 上的前一篇文章