我正在尝试在运行时添加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
谢谢, -迈克