【发布时间】:2019-09-20 13:09:54
【问题描述】:
我是 log4j 的新手。我的 log4j 配置没有将日志写入控制台,因为文件的日志工作正常。尽管参考了早期的帖子,但我无法解决此问题。 我有两个附加程序——一个用于控制台,另一个用于文件。我打算将 ERROR 和 FATAL 写入文件,因此使用 level=ERROR。我打算将所有日志写入控制台,因此使用 level=TRACE 作为控制台。 我的代码只包含一个名为“parallel”的包,有一个名为 ClassA 的类,其中一个方法可以记录所有类型的日志。
如果我在 Root 标记中同时指定控制台和文件附加程序,那么我的期望就得到了满足。如果我将 File appender 移到 Root 之外并在 Logger 标签下提及它,那么只有 File appender 可以工作,而 Console appender 不能工作。是否必须将所有 appender 都放在 Root 标签下?
package parallel;
public class ClassA {
private final Logger log = LogManager.getLogger(ClassA.class);
@Test
public void testLogs() {
log.info("info");
log.debug("debug");
log.warn("warn");
log.error("error");
log.fatal("fatal");
log.trace("trace");
}
}
<Configuration status="INFO">
<Properties>
<Property name="basePath" value="./logs" />
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout>
<Pattern>
[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
</Pattern>
</PatternLayout>
</Console>
<File name="fileLogger" fileName="${basePath}/error.log">
<PatternLayout>
<Pattern>
[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1} - %msg%n
</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root name="parallel">
<AppenderRef ref="console" level="trace" />
</Root>
<Logger name="parallel" level="warn" additivity="false">
<AppenderRef ref="fileLogger" />
</Logger>
</Loggers>
【问题讨论】:
-
只是为了检查 Root 标签是否工作正常,我在 Root 标签中提到了无效的 appender ref 值。程序错误说无法找到附加程序,这意味着我对控制台附加程序的原始参考很好。不确定控制台标签有什么问题
-
很可能您的 System.out 和/或错误流正在被重定向。
-
不确定重定向 system.out 是什么意思。当两个 Appender 都放在根目录下时,控制台输出工作正常
标签: log4j2