gpt4 book ai didi

java - 以编程方式设置 log4j2 文件附加器

转载 作者:行者123 更新时间:2023-11-30 06:26:10 25 4
gpt4 key购买 nike

我一直在尝试使用 log4j v2.7 构建 Java 应用程序。我有一些命令行参数允许用户配置 log4j,因此我尝试以编程方式配置它。

这是函数(主要是从 log4j 文档复制的)

public static void configureLogging(String path) {
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout").addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable");

builder.setStatusLevel(Level.ALL);
builder.setConfigurationName("BuilderTest");
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE")
.addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(layoutBuilder);

builder.add(appenderBuilder);
builder.add(builder.newLogger("Console", Level.ALL).add(builder.newAppenderRef("Stdout")));

appenderBuilder = builder.newAppender("file_log", "File")
.addAttribute("fileName", path)
.addAttribute("append", false)
.add(layoutBuilder);
builder.add(appenderBuilder);

builder.add(builder.newRootLogger(Level.ALL).add(builder.newAppenderRef("Stdout")));
builder.add( builder.newRootLogger( Level.ALL ).add( builder.newAppenderRef("file_log")));

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

因此控制台按预期输出。并且创建了一个空日志文件,但它不会向该文件输出任何内容。

最佳答案

我认为问题是您在下面的行中创建了 RootLogger 实例 2 次 -

builder.add(builder.newRootLogger(Level.ALL).add(builder.newAppenderRef("Stdout")));
builder.add( builder.newRootLogger( Level.ALL ).add( builder.newAppenderRef("file_log")));

尝试下面的行代替上面的两行 -

builder.add(builder.newRootLogger(Level.ALL).add(builder.newAppenderRef("Stdout")).add(builder.newAppenderRef("file_log")));

关于java - 以编程方式设置 log4j2 文件附加器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47162623/

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