我目前正在开发一个使用log4j的maven应用程序,我希望能够将所有日志级别输出到控制台。
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="ERROR">
<Appenders>
<Console name="Console" target="SYSTEM_OUT" level="TRACE">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%7pid] %-5p --- myapp %-42.42c{1.} : %m%n" />
<LevelRangeFilter maxLevel="ALL" onMatch="ACCEPT" onMismatch="DENY"/>
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<!-- Console can still output logs from higher log levels. -->
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
I有一个简单的rest调用,它将每个级别输出到控制台。
@RequestMapping(value = "/ping", method = RequestMethod.GET)
public ResponseEntity<?> processPing() throws Exception {
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
return new ResponseEntity<>(HttpStatus.OK);
}
当我改变LevelRangeFilter的maxlevel值时,我得到了预期的输出,但当我把它设置为trace或all时,我就没有得到预期的输出。
我已经能够得到跟踪到输出。我已经尝试改变根日志记录器级别,创建一个自定义日志记录器,并完全删除levelRangeFilter。这些都没有工作。
更新:我发现如果我调用log.isTraceEnabled(),它会返回false。我目前正在尝试弄清楚如何启用它。
1条答案
按热度按时间ehxuflar1#
您的代码在所有不同的级别上发出日志消息。这很好。
现在,log4j配置有一个仍然适用的过滤器,它位于类别上。
当您将附加程序的级别配置为TRACE时,该设置为log4j 1 history,并在log4j 2中被忽略。但根日志程序的级别设置为INFO。使用该设置,您将只看到INFO、WARN、ERROR和FATAL。