如何以编程方式更改 log4j2 中的 AppenderRef Level?

2024-04-20

我怎样才能改变AppenderRef Level在 log4j2 中?

有一个堆栈溢出问题 https://stackoverflow.com/questions/41427352/(带答案)这是通过非编程方式解决的。我想要相同的但以编程方式代替。里面只有一个get方法AppenderRef检索Level但没有方法设置它。

那么有什么办法可以设置Level in the AppenderRef以编程方式在 log4j2 中?


您必须通过删除附加器然后以所需的级别再次添加它来完成此操作。

Example log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <File name="logFile" fileName="log.txt" immediateFlush="false"
              append="true">
            <PatternLayout
                pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>

    <Loggers>
        <Root level="trace">
            <AppenderRef ref="logFile" level="info"/>
        </Root>
    </Loggers>
</Configuration>

示例代码:

package example;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;

public class Log4j2SetAppenderRefLvlMain {
    private static final Logger log = LogManager.getLogger();
    
    public static void main(String[] args) {
        final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
        final Configuration config = ctx.getConfiguration();

        
        log.info("Before altering the appender!");
        
        LoggerConfig rootLoggerConfig = config.getLoggers().get("");
        rootLoggerConfig.removeAppender("logFile");
        rootLoggerConfig.addAppender(config.getAppender("logFile"), Level.WARN, null);
        ctx.updateLoggers();
        
        log.info("After altering the appender!");
        log.warn("After altering the appender!");
    }

}

Output:

2017-04-13 21:04:20.892 [main] INFO  example.Log4j2SetAppenderRefLvlMain - Before altering the appender!
2017-04-13 21:04:20.895 [main] WARN  example.Log4j2SetAppenderRefLvlMain - After altering the appender!

请注意如何仅WARN在我们将附加程序级别更改为之后,级别消息将打印到日志中WARN。这证明它是有效的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式更改 log4j2 中的 AppenderRef Level? 的相关文章

随机推荐