如何在log4j2的手动代码配置中为appender添加级别?

时间:2017-09-23 14:36:48

标签: java logging log4j log4j2

来自here

  

您无需声明单独的记录器即可实现此目的。您可以   在AppenderRef元素上设置日志记录级别。

和xml示例(部分):

<Root level="trace">
  <AppenderRef ref="file" level="DEBUG"/>
  <AppenderRef ref="STDOUT" level="INFO"/>
</Root>

但是当我自己创建配置时,我找不到办法。例如,我有consoleAppenderBuilder和rootLoggerBuilder:

AppenderComponentBuilder consoleAppenderBuilder = builder
    .newAppender("Stdout", "CONSOLE")
    .addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);

RootLoggerComponentBuilder rootLoggerBuilder = builder
    .newRootLogger(Level.ERROR)
    .add(builder.newAppenderRef("Stdout"));

如何将控制台appender添加到root logger并定义appender的日志级别。我问这个是因为我想在root logger中添加多个appender。

2 个答案:

答案 0 :(得分:1)

作为替代方法,您可以使用以下ThresholdFilter添加example from the manual来指导您(它使用MarkerFilter,但应该是类似的过程)。

答案 1 :(得分:1)

以下是为Appender -

中的每个RootLogger设置日志级别的一种方法
AppenderComponentBuilder consoleAppenderBuilder = builder
    .newAppender("Stdout", "CONSOLE")
    .addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);

RootLoggerComponentBuilder rootLoggerBuilder = builder
    .newRootLogger(Level.ALL)
    .add(builder.newAppenderRef("Stdout").addAttribute("level", Level.INFO));

如果你有多个appender,下面的代码可以工作 -

RootLoggerComponentBuilder rootLoggerBuilder = builder
    .newRootLogger(Level.ALL)
    .add(builder.newAppenderRef("Stdout").addAttribute("level", Level.INFO)).add(builder.newAppenderRef("fileAppender").addAttribute("level", Level.ERROR));

要记住的唯一要点是Appender日志级别可以降低logger中给出的日志记录级别,但不能提高日志记录级别。

假设在上面的示例中,RootLogger初始化级别为Level.ALL,而Stdout appender级别为Level.INFO。因此,它会打印INFO级及以上(WARNERROR)的日志。但是,反过来不起作用,即如果RootLoggerLevel.INFOStdout appender有Level.All,那么它也会打印INFO级别的日志以及。