Не удается добавить приложение log4j2 динамически - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь добавить прокручиваемый файл-приложение 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

Спасибо, Майк

...