繁体   English   中英

如何在正在运行的应用程序中更改log4j2模式

[英]How to change log4j2 pattern in a running application

我正在寻找一种可能性来改变已经运行的应用程序中的log4j2日期格式。 我需要一个用户可以在不同语言之间进行选择的客户端。 根据他的选择,我想更改当前(仅作为示例)配置为的模式(布局)

<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
</Console>

有人有提示/线索如何做到这一点? 我找不到任何资源,因为log4j 1主要用于....

我不确定这是正确的方法,因为API目前可能缺少此选项,但它适用于我:

XML:

<Configuration status="WARN">
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="console"/>
        </Root>
    </Loggers>
</Configuration>

Java的:

logger.info("hey!");

LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration conf = ctx.getConfiguration();
Appender console = conf.getAppenders().get("console");   // <-- your appender name
PatternLayout layout = (PatternLayout) console.getLayout();

layout.setConversionPattern("%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n");

ctx.updateLoggers(conf);

logger.info("hey!");

结果:

14:02:00.343 [main] INFO  test.Log4j2Sample - hey!
14:02:00 [main] INFO  test.Log4j2Sample - hey!

Log4j 2具有该配置属性

log4j2.xml:

<Configuration monitorInterval="5">
    ...
</Configuration>

log4j 2会在每个monitorInterval秒自动重新读取整个配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM