如何在 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);
}
}
}
该方法是LogFormatUtils
class中唯一使用Log对象的方法,但是其使用的Log对象是从其他classes传递过来的,也就是说, Log 对象的 logger 名称不是 org.springframework.core.log.LogFormatUtils
,您可以将 logger 的名称更改为 org.springframework
并在 PatternLayout 中添加 %logger
以找到您需要的真实 logger 的名称。
我需要将特定 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);
}
}
}
该方法是LogFormatUtils
class中唯一使用Log对象的方法,但是其使用的Log对象是从其他classes传递过来的,也就是说, Log 对象的 logger 名称不是 org.springframework.core.log.LogFormatUtils
,您可以将 logger 的名称更改为 org.springframework
并在 PatternLayout 中添加 %logger
以找到您需要的真实 logger 的名称。