下面是我更改Log4j2中日志记录级别的代码。我是从one other stackoverflow thread得到的。 当我没有Log4j2.xml配置器时它曾经工作得更早,但由于某些原因,在我开始使用配置器后,这已经停止了工作。 日志级别不再在运行时更改。
public MyLogger() {
Logger log = LogManager.getLogger(MyLogger.class.getName());
}
public void setLevel(Level level) {
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration conf = ctx.getConfiguration();
LoggerConfig config = conf.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
config.setLevel(level);
ctx.updateLoggers(conf);
}
这是我的Lo4j2.xml配置文件。我也把它也放到了网上。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR">
<Properties>
<Property name="fileName">log/app.log</Property>
<Property name="fileNamePattern">log/app.log-%d{dd-MM-yyyy}-%i.log</Property>
<Property name="logPattern">%d{dd-MM-yyyy HH:mm:ss,SSS} [%t] %-5p %c{2} - %m%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${logPattern}"/>
</Console>
<RollingFile name="MyRollingFile" fileName="${fileName}" filePattern="${fileNamePattern}">
<PatternLayout pattern="${logPattern}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="20MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.cf.re" level="error" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="MyRollingFile"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
有人可以在这里指出问题吗?或者告诉我如何调试此问题?
答案 0 :(得分:1)
MyLogger的完全限定类名是什么?包名是否以“com.cf.re”开头?
您配置了2台Logger,root和“com.cf.re”。您只是更改根记录器的日志级别。如果MyLogger的包以“com.cf.re”开头,并且您还想更改该Logger的日志级别,请使用以下代码:
public void setLevel(Level level) {
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration conf = ctx.getConfiguration();
LoggerConfig root = conf.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
root.setLevel(level);
LoggerConfig named = conf.getLoggerConfig("com.cf.re");
named.setLevel(level);
ctx.updateLoggers(conf);
}
答案 1 :(得分:1)
有一种更简单的方法,它就在log4j2网站的FAQ页面上
https://logging.apache.org/log4j/2.x/faq.html#reconfig_level_from_code
以下示例代码:
Configurator.setLevel(logger.getName(), Level.INFO);