Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式设置log4j2文件追加器_Java_Log4j2 - Fatal编程技术网

Java 以编程方式设置log4j2文件追加器

Java 以编程方式设置log4j2文件追加器,java,log4j2,Java,Log4j2,我一直在尝试利用log4jv2.7构建一个Java应用程序。我有一些命令行参数,允许用户配置log4j,因此我尝试以编程方式配置它 下面是函数(主要是从log4j文档中复制的) 公共静态无效配置日志记录(字符串路径){ ConfigurationBuilder=ConfigurationBuilderFactory.newConfigurationBuilder(); LayoutComponentBuilder layoutBuilder=builder.newLayout(“PatternL

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

下面是函数(主要是从log4j文档中复制的)

公共静态无效配置日志记录(字符串路径){
ConfigurationBuilder=ConfigurationBuilderFactory.newConfigurationBuilder();
LayoutComponentBuilder layoutBuilder=builder.newLayout(“PatternLayout”).addAttribute(“pattern”,%d[%t]-5级别:%msg%n%throwable”);
builder.setStatusLevel(Level.ALL);
builder.setConfigurationName(“BuilderTest”);
AppenderComponentBuilder appenderBuilder=builder.newAppender(“标准输出”、“控制台”)
.addAttribute(“目标”,ConsolePender.target.SYSTEM_OUT);
add(layoutBuilder);
builder.add(appenderBuilder);
add(builder.newLogger(“控制台”,Level.ALL).add(builder.newAppenderRef(“标准输出”));
appenderBuilder=builder.newAppender(“文件\日志”,“文件”)
.addAttribute(“文件名”,路径)
.addAttribute(“追加”,false)
.添加(布局生成器);
builder.add(appenderBuilder);
add(builder.newRootLogger(Level.ALL).add(builder.newAppenderRef(“Stdout”));
add(builder.newRootLogger(Level.ALL).add(builder.newAppenderRef(“文件日志”));
Configurator.initialize(builder.build());
}

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

我认为问题在于您在下面几行中创建了两次
RootLogger
实例-

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")));
您知道当配置文件发生更改时?您可以将配置文件外部化,这样您的代码就不依赖于log4j2的实现细节,这使得长期维护更容易。
builder.add(builder.newRootLogger(Level.ALL).add(builder.newAppenderRef("Stdout")).add(builder.newAppenderRef("file_log")));