是否可以在log4j中更改包的日志级别?

64jmpszr  于 2022-12-04  发布在  其他
关注(0)|答案(3)|浏览(216)

目前我有一个库,它将某些信息记录为ERROR。如果我像这样更改log4j设置:

log4j.logger.com.company.theirpackage.foo=OFF

这将完全禁用库的日志记录。然而,我真正希望的是仍然看到这些信息,但将其记录在WARN或INFO级别。换句话说,当特定代码调用log.error()时,我希望它看起来像是调用了log.warn()log.info()
有没有办法用log4j来实现这一点?

vsnjm48y

vsnjm48y1#

不是直接的,但是你可以写一个定制的appender来拦截调用,检查级别,然后在你想要的任何级别打印它们。或者,你可以做一些面向方面的编程来拦截/改变它们的调用。
但是为什么要更改他们记录的级别呢?

tyg4sfes

tyg4sfes2#

我认为这是可能的,通过实现Filter,其中LoggingEvent内部的级别在满足特定条件时被改变。

cpjpxq1n

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的信息。它有模式选择器选项,允许你根据自己的条件选择不同的模式。

相关问题