使用log4j2版本2.22.1,如何像WriterAppender一样将StringWriter作为参数添加到Appender中?

问题描述 投票:0回答:1

我正在从 log4j 1.x 迁移到 2.x,在 1.x 中,我使用 java.io 中的 StringWriter 并将参数传递给 1.0 中的 WriterAppender,但如何使用 2.22.1 版本的最新 WriterAppender 传递相同的 StringWriter 作为参数

Log4j2.x 在任何附加程序(如 WriterAppender)中使用 StringWriter

logging migration log4j2
1个回答
0
投票

Log4j Core 2 使用构建器模式来创建布局和附加程序。 要向当前 Log4j Core 配置添加和删除附加程序,您可以使用如下代码:

LoggerContext context = LogManager.getContext(false);
//
// Log4j Core is not the only Log4j API implementation
//
if (context instanceof org.apache.logging.log4j.core.LoggerContext coreContext) {
    Configuration configuration = coreContext.getConfiguration();
    // A Layout
    PatternLayout layout = PatternLayout.newBuilder()
            .setConfiguration(configuration)
            .setPattern("%d [%t] %p %c - %m%n")
            .build();
    // An appender
    StringWriter writer = new StringWriter();
    WriterAppender appender = WriterAppender.newBuilder()
            .setConfiguration(configuration)
            .setName("MY_APPENDER")
            .setLayout(layout)
            .setTarget(writer)
            .build();
    // In order: start and add
    appender.start();
    configuration.getRootLogger()
            .addAppender(appender, null, null);
    // Use the appender
    // ...

    // In order: remove and stop
    configuration.getRootLogger()
            .removeAppender(appender.getName());
    appender.stop();
}

PS:Log4j 2 是 Log4j 的主要版本,因此包名称发生了变化。上面的代码需要以下导入:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.appender.WriterAppender;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.spi.LoggerContext;
© www.soinside.com 2019 - 2024. All rights reserved.