我在类路径中有一个log4j2.xml配置文件。其中一个appender是一个文件appender,我想在运行时在Java应用程序中设置目标文件名。Log4J2 - 在运行时分配文件appender文件名
按照docs我应该能够使用双“$”,并在log4j2.xml文件中的上下文前缀:
<appenders>
<File name="MyFile" fileName="$${sys:logFilename}">
<PatternLayout pattern="%-4r %d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
其中“SYS”前缀表示该配置将在查找属性“logFilename”在系统属性中。因此,在应用程序中,我打电话(而早):
System.setProperty("logFilename", filename);
我也打开自动重新配置为log4j2在xml文件:
<configuration status="debug" monitorInterval="5">>
不幸的是,这无论如何没有任何效果,并且从不创建日志文件。一些log4j2状态输出的低于:
2013年2月13日15:36:37574 DEBUG上类org.apache.logging.log4j.core.appender.FileAppender调用createAppender用于与params元素文件(文件名=“null”,suppressExceptions =“null”,bufferedIO =“null”,PatternLayout(% - >“)”,append =“null”,locking =“null”,name =“MyFile” 4r%d {yyyy-MM-dd/HH:mm:ss.SSS/zzz} [%t]%-5级%logger {36} - %msg%n),null)
2013-02-13 15:36:37,576调试开始FileManager $ {sys:logFilename}
如何在运行时设置文件附加程序中“文件名”的值?或者,我怎样才能在运行时简单地将新的文件附加器添加到根记录器?在Log4j 2.0中,大部分改变配置的API都是隐藏的。
做一个SO搜索。它已经被回答了: http://stackoverflow.com/questions/10699358/log4j-creating-modifying-appenders-at-runtime-log-file-recreated-and-not-appe – mightyrick 2013-02-13 20:51:53
这是一个Log4j 2.0的问题,所以API与Log4j 1.2非常不同,以前答案中的很多方法都没有公开。 – user84756 2013-02-13 20:58:51