我正在从 log4j 1.x 迁移到 2.x,在 1.x 中,我使用 java.io 中的 StringWriter 并将参数传递给 1.0 中的 WriterAppender,但如何使用 2.22.1 版本的最新 WriterAppender 传递相同的 StringWriter 作为参数
Log4j2.x 在任何附加程序(如 WriterAppender)中使用 StringWriter
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;