无法动态添加log4j2附加程序

时间:2019-04-02 17:59:16

标签: java log4j2

我正在尝试在运行时添加log4j2滚动文件追加程序。我有一个具有自己的log4j2.xml的进程,该进程记录到文件和控制台。该过程将接收其他过程的请求。它创建了一个输出文件夹,我想在该特定运行期间在其中创建输出的日志文件。因此,我在代码中添加了滚动文件追加器,然后在作业完成时将其删除。这在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文件已创建,但未写入任何文件。我也像这样关闭appender:

     if (appender != null && loggerContext != null)
     {
        appender.stop();
        Configuration config = loggerContext.getConfiguration();
        config.getRootLogger().removeAppender("OOEngineFileAppender");
        loggerContext.getRootLogger().removeAppender(appender);
        loggerContext.updateLoggers();
     }

知道我在做什么错吗?

顺便说一句,我通过命令行开关打开了log4j2调试,当我添加新的附加程序时,我看到以下输出:

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

谢谢, -迈克

0 个答案:

没有答案