如何在Log4J中只记录指定框架类的输出

kknvjkwl  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(148)

我需要将特定Spring类(org.springframework.core.log.LogFormatUtils)的输出记录到给定的追加器(最后是Graylog,但我使用FileAppender用于测试目的--在这里没有关系)。

<Loggers>
        <Logger name="org.springframework.core.log.LogFormatUtils" level="DEBUG">
            <AppenderRef ref="FileAppender"/>
        </Logger>
        <Root level="debug" includeLocation="true">
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
</Loggers>

然而,这并不起作用--它什么也不输出。如果我将记录器的名称/包引用改为“org.springframework”,它会像预期的那样工作,但我对沿着而来的一堆信息不感兴趣。另外,如果我表示类似com.myapp.mypackage的内容,它也会工作。那么,在我一般地记录Spring框架输出之前,是否有一些警告或步骤要执行?

szqfcxe2

szqfcxe21#

public static void traceDebug(Log logger, Function<Boolean, String> messageFactory) {
    if (logger.isDebugEnabled()) {
        boolean traceEnabled = logger.isTraceEnabled();
        String logMessage = messageFactory.apply(traceEnabled);
        if (traceEnabled) {
            logger.trace(logMessage);
        }
        else {
            logger.debug(logMessage);
        }
    }
}

该方法是LogFormatUtils类中唯一使用Log对象的方法,但它使用的Log对象是从其他类传过来的,也就是说Log对象的logger名称不是org.springframework.core.log.LogFormatUtils,可以将logger的名称改为org.springframework,并将%logger添加到PatternLayout中,找到真正需要的logger名称。

相关问题