【问题标题】:Cannot change Log level using Log4j2无法使用 Log4j2 更改日志级别
【发布时间】:2014-10-17 17:44:38
【问题描述】:

以下是我在 Log4j2 中更改日志记录级别的代码。我从one other stackoverflow thread 得到这个。 当我没有 Log4j2.xml 配置器时,它曾经工作得更早,但由于某种原因,在我开始使用 configurator 后,它已经停止工作了。 日志级别在运行时不再更改。

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>

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

【问题讨论】:

    标签: java logging configuration log4j2


    【解决方案1】:

    MyLogger 的全限定类名是什么?包名是否以“com.cf.re”开头?

    您配置了 2 个记录器,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);
    }
    

    【讨论】:

    • 谢谢 Remko。这正是我想要的。
    • 如果这回答了您的问题,您能否将其标记为已解决?谢谢!
    【解决方案2】:

    有一种更简单的方法可以做到这一点,它就在 log4j2 网站的常见问题页面上

    https://logging.apache.org/log4j/2.x/faq.html#reconfig_level_from_code

    示例代码如下:

    Configurator.setLevel(logger.getName(), Level.INFO);
    

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 2014-06-19
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多