首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >log4j-2中的ConsoleAppender.setWriter等效项是什么

log4j-2中的ConsoleAppender.setWriter等效项是什么
EN

Stack Overflow用户
提问于 2021-10-21 05:54:42
回答 1查看 251关注 0票数 0

我正在尝试从log4j-1.2迁移到log4j-2

log4j-2中以下几行的等价物是什么?

代码语言:javascript
复制
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

public static final Logger s_logger = Logger.getLogger(x.class);
ConsoleAppender ca = new ConsoleAppender();
ca.setWriter(new OutputStreamWriter(System.out, "UTF-8"));
ca.setLayout(new PatternLayout("%-5p [%t]: %m%n"));
s_logger.addAppender(ca);

我在Apache文档中找不到答案。

EN

回答 1

Stack Overflow用户

发布于 2021-10-21 19:00:44

在Log4j2中,关于您的代码有两个主要更改:

  • Log4j2分为一个API和一个实现,因此org.apache.logging.log4j.Logger不一定是org.apache.logging.log4j.core.Logger
  • 组件是使用构建器模式创建的,没有setter。

与您的代码最接近的等价物使用WriterAppender

代码语言:javascript
复制
Logger logger = LogManager.getLogger();
if (logger instanceof org.apache.logging.log4j.core.Logger) {
    StringLayout layout = PatternLayout.newBuilder().withPattern("%-5p [%t]: %m%n").build();
    OutputStreamWriter writer = new OutputStreamWriter(System.out, StandardCharsets.UTF_8);
    Appender appender = WriterAppender.newBuilder().setTarget(writer).setLayout(layout).build();
    ((org.apache.logging.log4j.core.Logger) logger).addAppender(appender);
}

ConsoleAppender仅限于使用System.outSystem.err,并使用默认系统编码:

代码语言:javascript
复制
Logger logger = LogManager.getLogger();
if (logger instanceof org.apache.logging.log4j.core.Logger) {
    StringLayout layout = PatternLayout.newBuilder().withPattern("%-5p [%t]: %m%n").build();
    Appender appender = ConsoleAppender.newBuilder().setTarget(Target.SYSTEM_OUT).setLayout(layout).build();
    ((org.apache.logging.log4j.core.Logger) logger).addAppender(appender);
}

上面的代码示例使用这些导入:

代码语言:javascript
复制
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.StringLayout;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.appender.ConsoleAppender.Target;
import org.apache.logging.log4j.core.appender.WriterAppender;
import org.apache.logging.log4j.core.layout.PatternLayout;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69656539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档