目前我有一个库,它将某些信息记录为ERROR。如果我像这样更改log4j设置:
log4j.logger.com.company.theirpackage.foo=OFF
这将完全禁用库的日志记录。然而,我真正希望的是仍然看到这些信息,但将其记录在WARN或INFO级别。换句话说,当特定代码调用log.error()时,我希望它看起来像是调用了log.warn()或log.info()。有没有办法用log4j来实现这一点?
log.error()
log.warn()
log.info()
vsnjm48y1#
不是直接的,但是你可以写一个定制的appender来拦截调用,检查级别,然后在你想要的任何级别打印它们。或者,你可以做一些面向方面的编程来拦截/改变它们的调用。但是为什么要更改他们记录的级别呢?
tyg4sfes2#
我认为这是可能的,通过实现Filter,其中LoggingEvent内部的级别在满足特定条件时被改变。
cpjpxq1n3#
有多种方法可以做到这一点。我认为最简单的方法是使用自定义附加器。
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn"> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="console-> %-5p %c{1}:%L - %m%n" /> </Console> <Console name="CUSTOM_ERROR_STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="dependent-> %-5p{ERROR=WARN} %c{1}:%L - %m%n" /> </Console> </Appenders> <Loggers> <!-- Root logger referring to console appender --> <Root level="INFO"> <AppenderRef ref="STDOUT"/> </Root> <Logger name="com.my.LogTest" level="INFO" additivity="false"> <AppenderRef ref="CUSTOM_ERROR_STDOUT" /> </Logger> </Loggers> </Configuration>
在这里我把所有的错误日志转换成警告为该特定类com.my.LogTest。你可以找到更多关于Appender Layouts here的信息。它有模式选择器选项,允许你根据自己的条件选择不同的模式。
3条答案
按热度按时间vsnjm48y1#
不是直接的,但是你可以写一个定制的appender来拦截调用,检查级别,然后在你想要的任何级别打印它们。或者,你可以做一些面向方面的编程来拦截/改变它们的调用。
但是为什么要更改他们记录的级别呢?
tyg4sfes2#
我认为这是可能的,通过实现Filter,其中LoggingEvent内部的级别在满足特定条件时被改变。
cpjpxq1n3#
有多种方法可以做到这一点。我认为最简单的方法是使用自定义附加器。
在这里我把所有的错误日志转换成警告为该特定类com.my.LogTest。你可以找到更多关于Appender Layouts here的信息。它有模式选择器选项,允许你根据自己的条件选择不同的模式。