无法使用Log4j2更改日志级别

时间:2014-10-17 17:44:38

标签: java logging configuration log4j2

下面是我更改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>

有人可以在这里指出问题吗?或者告诉我如何调试此问题?

2 个答案:

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