在运行时以编程方式使用log4j2添加文件追加器

o7jaxewo  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(149)

现在我们从log4j迁移到log4j2。配置文件没有更改(仅包括控制台追加器)。我们希望在运行时添加文件追加器,因此会创建日志文件,但不会显示日志。当我们使用log4j时,我们这样做:

PatternLayout layout = new PatternLayout("%d - " + DEFAULT_CONVERSION_PATTERN);
    FileAppender fileAppender = new FileAppender(layout, file.getPath());
    fileAppender.setName("fileAppender");
    logger.removeAllAppenders();
    logger.addAppender(fileAppender);
    logger.addAppender(new ConsoleAppender(layout));

它运行得很好。但是当我们转到log4j2时,我们开始使用以下代码:

PatternLayout layout = PatternLayout.newBuilder().withPattern("%d - " + DEFAULT_CONVERSION_PATTERN).build();
    FileAppender fileAppender = FileAppender.newBuilder().setLayout(layout).withFileName(file.getPath())
                    .setName("fileAppender").build();
    LoggerContext.getContext().getLogger(name).getAppenders().clear();
    LoggerContext.getContext().getLogger(name).addAppender(fileAppender);
    LoggerContext.getContext().getLogger(name).addAppender(ConsoleAppender.newBuilder().setLayout(layout).build());

文件已创建,但日志仅显示在控制台中...有人能帮助您有效创建FileAppender吗?

pieyvz9o

pieyvz9o1#

从您的描述来看,您似乎成功地示例化了一个FileAppender,该FileAppender已准备好记录它接收到的消息,但不知何故,没有消息传递到此Appender。
您的代码示例调用了一个不存在的方法LoggerContext.getContext()-我认为这应该是LoggerContextFactory.getContext()或LogManager.getContext()。

相关问题