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

How to log output of just a specified framework class in Log4J

我需要将特定 Spring class (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 框架输出之前是否有一些注意事项或步骤需要执行?

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);
        }
    }
}

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