У меня есть файл конфигурации log4j2.xml в пути к классу. Один из добавлений - это приложение для файлов, и я хотел бы установить имя целевого файла во время выполнения приложения Java.
В соответствии с 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-02-13 15: 36: 37 574 DEBUG Вызов createAppender в классе org.apache.logging.log4j.core.appender.FileAppender для элемента Файл с параметрами (fileName = "$ {sys: logFilename}", append = "null" , lock = "null" , name= "MyFile", немедленноеFlush = "null" , suppressExceptions = "null" , bufferedIO = "null" , PatternLayout (% - 4r% d {yyyy-MM-dd/HH: mm: ss.SSS/zzz} [% t]% -5level% logger {36} -% msg% n), null)
2013-02-13 15: 36: 37 576 DEBUG Запуск FileManager ${sys: logFilename}
Как я могу установить значение "имя_файла" в File Appender во время выполнения? В качестве альтернативы, как я могу просто добавить новый File Appender в корневой журнал во время выполнения? В Log4j 2.0 большая часть API для изменения конфигурации скрыта.