配置 log4j2 以针对不同的包具有不同的日志级别
Configuring log4j2 to have different log levels for different packages
我想配置 log4j2 来记录我的应用程序。我想使用日志级别 DEBUG 记录我的应用程序,但使用日志级别 ERROR 休眠。
我查看了文档(此处:https://logging.apache.org/log4j/2.x/manual/customconfig.html)并阅读了其他站点,但无法解决正确配置 log4j2 的问题。
public static void init(String name) {
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.ERROR);
builder.setConfigurationName("BuilderTest");
builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
.addAttribute("level", Level.DEBUG));
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE")
.addAttribute("target",ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY, Filter.Result.NEUTRAL)
.addAttribute("marker", "FLOW"));
builder.add(appenderBuilder);
builder.add(builder.newLogger("org.mypackage", Level.DEBUG)
.add(builder.newAppenderRef("Stdout"))
.addAttribute("additivity", false));
// builder.add(builder.newLogger("org.hibernate", Level.ERROR)
// .add(builder.newAppenderRef("Stdout"))
// .addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
LoggerContext ctx = Configurator.initialize(builder.build());
logger = ctx.getLogger(name);
}
我尝试的是使用包名称为每个包设置特定的日志级别,并为 loggers/root 记录器尝试不同的级别,但最后我总是得到太多信息(例如我的调试消息和来自休眠的调试消息)或信息太少。
如何正确配置 log4j2 以满足我的需要?
我找到了我的答案的解决方案。我不知道这是否是正确的做法,但它对我有用。这是我的 log4j2.xml(通过配置文件完成,而不是以编程方式完成):
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.mypackage" level="DEBUG"/>
<Logger name="org.hibernate" level="ERROR"/>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
这样,mypackage 中的代码将记录在 DEBUG 级别,而 hibernate 将记录在 ERROR 级别。
我想配置 log4j2 来记录我的应用程序。我想使用日志级别 DEBUG 记录我的应用程序,但使用日志级别 ERROR 休眠。
我查看了文档(此处:https://logging.apache.org/log4j/2.x/manual/customconfig.html)并阅读了其他站点,但无法解决正确配置 log4j2 的问题。
public static void init(String name) {
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.ERROR);
builder.setConfigurationName("BuilderTest");
builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
.addAttribute("level", Level.DEBUG));
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE")
.addAttribute("target",ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY, Filter.Result.NEUTRAL)
.addAttribute("marker", "FLOW"));
builder.add(appenderBuilder);
builder.add(builder.newLogger("org.mypackage", Level.DEBUG)
.add(builder.newAppenderRef("Stdout"))
.addAttribute("additivity", false));
// builder.add(builder.newLogger("org.hibernate", Level.ERROR)
// .add(builder.newAppenderRef("Stdout"))
// .addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
LoggerContext ctx = Configurator.initialize(builder.build());
logger = ctx.getLogger(name);
}
我尝试的是使用包名称为每个包设置特定的日志级别,并为 loggers/root 记录器尝试不同的级别,但最后我总是得到太多信息(例如我的调试消息和来自休眠的调试消息)或信息太少。
如何正确配置 log4j2 以满足我的需要?
我找到了我的答案的解决方案。我不知道这是否是正确的做法,但它对我有用。这是我的 log4j2.xml(通过配置文件完成,而不是以编程方式完成):
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.mypackage" level="DEBUG"/>
<Logger name="org.hibernate" level="ERROR"/>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
这样,mypackage 中的代码将记录在 DEBUG 级别,而 hibernate 将记录在 ERROR 级别。