我想使用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
那么我的www.example.com文件应该是什么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()...也在stdout中打印。
6条答案
按热度按时间cgyqldqp1#
下面也以属性文件格式解决了这个问题。诀窍是正确定义过滤器。这里是Log4j属性信息
原始尝试,已修改以筛选警告& ERROR:
piv4azn72#
根据Jon Skeet在Post上的前一篇文章
不幸的是,没有最大阈值,因此无论您在哪里得到调试消息,您也会得到警告消息。
e5nszbig3#
1.您必须使用.xml配置,而不是使用.properties配置。
1.在.xml配置中放置一个名为“filter”的元素,其类型为“org.apache.log4j.varia.LevelRangeFilter”,并设置其参数
LevelMax
和LevelMin
。例如,以下.xml配置定义了两个附加器:stdout、stderr。stdout将级别小于或等于INFO的所有日志输出到stdout,stderr将级别大于INFO的所有日志输出到stderr。
有关更多信息,请访问:http://www.laliluna.de/articles/posts/log4j-tutorial.html
pinkon5k4#
另一个示例使用来自log4j2的
ThresholdFilter
标记。请参阅doc。
bis0qfac5#
这是一个完全(!)符合您要求的回登录配置:
cgfeq70w6#
将其更改为NEUTRAL并添加DEBUG过滤器应该也可以捕获DEBUG。还有另一个内置过滤器需要janino依赖项: