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

标签 java logging log4j log4j2

来自here

You don’t need to declare separate loggers to achieve this. You can set the logging level on the AppenderRef element.

以及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"));

如何将控制台附加程序添加到根记录器并定义附加程序的日志级别。我问这个是因为我想向根记录器添加多个附加程序。

最佳答案

下面是在 RootLogger 中为每个 Appender 设置日志级别的一种方法 -

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));

如果您有多个附加程序,下面的代码可以工作 -

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 附加程序,它是 Level.INFO 。因此,它将打印 INFO 级别及以上级别的日志(WARNERROR)。但是,相反的情况将不起作用,即如果 RootLogger 具有 Level.INFO 并且 Stdout 附加程序具有 Level.All,在这种情况下,它也会打印 INFO 级别及以上级别的日志。

关于java - 如何在log4j2中手动代码配置中为appender添加级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46380709/

相关文章:

java - 从java调用系统命令来保存日志文件

http - 如何查看 Websphere 应用程序服务器 (WAS) 响应

java - NPE 与 Perf4j 和 Log4j

java - 通过 http 的 Akka 对象流

logging - 谁使用 syslog 记录他们的 Web 应用程序

java - 连接到 Microsoft SQL Server 时出错

java - 如何在 Hadoop/HDP 组件中配置日志记录?

java - 将 log4j.properties 放入 Eclipse 中的 Maven 项目中,其中 "default package"文件夹内有一些 "src"?

java - 使用递归反转字符串,但为什么它不打印整个字符串?

java - 我的isbn检查器有什么错误?