and*_*bd1 4 java configuration logging log4j log4j2
我认为这段代码很好地解释了我正在尝试做的事情
package us.benanderson;
public class MyClass {
private static final Logger LOG = LogManager.getLogger(MyClass.class);
...
// within a method
LOG.debug("only output to appFile");
LOG.error("output to both appFile and errorFile");
Run Code Online (Sandbox Code Playgroud)
这就是我猜应该是我的配置
<Loggers>
<Logger name="us.benanderson" level="debug" additivity="true">
<AppenderRef ref="appFile" />
</Logger>
<Root level="error">
<AppenderRef ref="errorFile" />
</Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)
但是,我发现当additivity ="true"时,调试消息也会输出到errorFile.当additivity ="false"时,不会向errorFile输出任何内容.有没有办法做我想做的事情?
我认为实现你想要的最简单的方法是直接在appender-ref上放一个级别.这样就无需在配置中使用命名记录器,从而简化了配置.
如果要将某个包的日志事件重定向到单独的appender,则命名记录器仍然有用.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<File name="appFile" fileName="logs/appFile.log" append="true">
<PatternLayout pattern="%-5p %d{ABSOLUTE} [%t] %c - %m%n" />
</File>
<File name="errorFile" fileName="logs/errorFile.log" append="true">
<PatternLayout pattern="%-5p %d{ABSOLUTE} [%t] %c - %m%n" />
</File>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="appFile" level="debug" />
<AppenderRef ref="errorFile" level="error" />
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
如果您想要进行更多不寻常的过滤,阈值过滤器和过滤器组合尤其有用.例如,如果您只想将INFO和WARN级别事件发送到某个appender,不包括TRACE/DEBUG,还要排除ERROR和FATAL级别事件(!),您可以这样做:
<Console name="only-info-warn">
<PatternLayout pattern="%-5p %c %message %n" />
<Filters>
<!-- First deny error and fatal messages -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>
<!-- Then accept info, warn, error, fatal and deny debug/trace -->
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Console>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8623 次 |
| 最近记录: |