Я пытаюсь добавить прокручиваемый файл-приложение log4j2 во время выполнения.У меня есть процесс, который имеет свой собственный log4j2.xml, который регистрирует в файл и консоль.Этот процесс получит запрос от других процессов.Он создает выходную папку, в которой я хочу создать файл журнала для вывода во время этого конкретного запуска.Итак, я добавляю в код обновляемый файл appender, а затем удаляю его после завершения задания.Это работало в log4j 1.x, но не работает теперь, когда я обновился до log4j2.Вот код для добавления приложения:
final LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
final Configuration config = loggerContext.getConfiguration();
FileAppender appender =
FileAppender.newBuilder().withName("MyFileAppender").withAppend(false)
.withFileName(new File(myOutputDirectory, "log.txt").toString())
.withLayout(
PatternLayout.newBuilder().withPattern("%d [%t] %-5p %c - %m%n").build())
.setConfiguration(loggerContext.getConfiguration()).build();
appender.start();
config.addAppender(appender);
loggerContext.getRootLogger().addAppender(loggerContext.getConfiguration().getAppender(appender.getName()));
loggerContext.updateLoggers();
Файл log.txt создан, но в него ничего не записано.Я также закрываю приложение следующим образом:
if (appender != null && loggerContext != null)
{
appender.stop();
Configuration config = loggerContext.getConfiguration();
config.getRootLogger().removeAppender("OOEngineFileAppender");
loggerContext.getRootLogger().removeAppender(appender);
loggerContext.updateLoggers();
}
Есть идеи, что я делаю не так?
Кстати, я включил отладку log4j2 через переключатель командной строки и вижу этот вывод, когдаЯ добавляю новый appender:
DEBUG StatusLogger Not in a ServletContext environment, thus not loading WebLookup plugin.
DEBUG StatusLogger PluginManager 'Converter' found 44 plugins
DEBUG StatusLogger Starting OutputStreamManager SYSTEM_OUT.false.false-2
DEBUG StatusLogger Starting FileManager e:\temp\OutputDir\TaskRun_20190402_215311_122\log.txt
Спасибо, Майк