Bar*_*lle 6 java logging log4j log4j2
拥有以下配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss.SSS} %-5level] %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="error.log">
<PatternLayout pattern="[%d{ISO8601} %-5level] %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="errors" level="error">
<AppenderRef ref="File"/>
</Logger>
<Root level="all">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
仅将(全部)日志记录输出写入控制台.然而,我有意将上面的任何内容写入error以error.log稍微不同的格式命名的文件中.但是,运行我的应用程序会导致所有内容都被写入控制台,而后面会留下一个空文件(它被创建,只是没有填充).
不知何故,似乎Root记录器捕获了所有东西,因为我也试过这个:
<Logger name="errors" level="error">
<AppenderRef ref="Console"/>
</Logger>
Run Code Online (Sandbox Code Playgroud)
这不会记录两次.我真的没有想法,我甚至从文档中复制了一个例子(样本#2来自这里),并且还留下了一个空文件.
Rem*_*pma 13
是的,根记录器级别为ALL,因此它将接收所有事件.一种选择是这样做:
<Loggers>
<Root level="all">
<AppenderRef ref="Console" level="trace" />
<AppenderRef ref="File" level="error" />
</Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)
这样您只需要一个记录器,因此您不必担心可加性,并且在代码中您只需编写LogManager.getLogger(MyClass.class)即可获取Logger实例.(如果使用命名的Logger,则需要在代码中使用记录器名称:LogManager.getLogger("error").)