gpt4 book ai didi

java - 在 Java 中初始化 Log4j2 滚动文件 Appender

转载 作者:行者123 更新时间:2023-12-01 16:24:03 25 4
gpt4 key购买 nike

我正在使用 log4j2。

我想创建一个 RollingFileAppender 每天轮换日志文件。在应用程序启动之前,日志文件的名称是未知的(日志文件名称是根据应用程序配置组装的)。

这就是为什么我需要在运行时添加 RollingFileAppender。

我有以下代码:

public static final ConfigurationBuilder<BuiltConfiguration> BUILDER = ConfigurationBuilderFactory.newConfigurationBuilder

public void initFileLoggerWithFilePattern(final String pattern) {
final LoggerComponentBuilder logger = BUILDER.newLogger("FileLogger", Level.DEBUG);
final AppenderComponentBuilder appender = createFileAppenderWithFilePattern(pattern);

BUILDER.add(appender);

logger.add(BUILDER.newAppenderRef("RollingFileAppender"));

BUILDER.add(logger);

Configurator.initialize(BUILDER.build());
}

public AppenderComponentBuilder createFileAppenderWithFilePattern(final String pattern) {
final AppenderComponentBuilder acb = BUILDER.newAppender("RollingFileAppender", "RollingFile");
acb.addAttribute("fileName", pattern);
acb.addAttribute("filePattern", pattern);
acb.addComponent(createPatternLayout());
acb.addComponent(createTimeBasedTriggeringPolicy());

return acb;
}

public LayoutComponentBuilder createPatternLayout() {
final LayoutComponentBuilder lcb = BUILDER.newLayout("PatternLayout");
lcb.addAttribute("pattern", "%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT}Z %m");

return lcb;
}

public ComponentBuilder createTimeBasedTriggeringPolicy() {
final ComponentBuilder policies = BUILDER.newComponent("Policies");
final ComponentBuilder policy = BUILDER.newComponent("TimeBasedTriggeringPolicy");

policies.addComponent(policy);

return policies;
}

问题是这段代码完全没有改变。没有附加器也没有记录器被添加到配置中。以编程方式创建的“FileLogger”不可用。

执行上面的代码之后,我使用此代码打印记录器和 Appender。


private void printLog4jConfig() {
final LoggerContext context = (LoggerContext) LogManager.getContext(false);
final Configuration config = context.getConfiguration();


// Print appenders
for(Appender app : config.getAppenders().values()) {
System.out.println(app.getName());
}

// Print Loggers and their Appenders
for(LoggerConfig lc : config.getLoggers().values()) {
System.out.println(lc);

for(Appender app : lc.getAppenders().values()) {
System.out.println(" " + app);
}
}
}

输出:

Appenders
-------------
STDOUT


Loggers
-------------
root
STDOUT
Console
STDOUT

我的问题:

我的代码有什么问题吗?为什么我的 Appender 和 Logger 没有添加?分别为什么配置没有被刷新/更新?

如何在运行时将 RollingFileAppender 以及记录器添加到 log4j2 配置中?

最佳答案

我找到了问题的解决方案。

改为使用

Configurator.initialize(BUILDER.build())

我必须使用

Configurator.reconfigure(BUILDER.build());

这重新加载了配置,我能够看到并使用我的附加程序和记录器。

关于java - 在 Java 中初始化 Log4j2 滚动文件 Appender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62192721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com