来自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
级别及以上级别的日志(WARN
、ERROR
)。但是,相反的情况将不起作用,即如果 RootLogger
具有 Level.INFO
并且 Stdout
附加程序具有 Level.All
,在这种情况下,它也会打印 INFO
级别及以上级别的日志。
关于java - 如何在log4j2中手动代码配置中为appender添加级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46380709/