首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置LogBack/ConsoleAppender写入STDERR

配置LogBack/ConsoleAppender写入STDERR
EN

Stack Overflow用户
提问于 2015-04-25 00:05:55
回答 1查看 720关注 0票数 0

我想用ConsoleAppender配置Logback以使用stderr,而不是stdout。特别是,我希望使用纯代码来实现这一点,而不是使用属性/xml文件。这是我的尝试。有关此代码的关键注意事项:当调用.reset()时(如下面的代码所示),什么都不登出。当没有调用.reset()时,所有日志都被发送到STDOUT (从而表明下面的代码根本不工作)。

启用该功能的关键部分是什么?

代码语言:javascript
复制
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.ConsoleAppender;
import org.slf4j.LoggerFactory;

// stuff

  private static Logger buildLogger() {


        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(henson.class);
        lc.reset();

        PatternLayoutEncoder ple = new PatternLayoutEncoder();

        ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
        ple.setContext(lc);
        ple.start();

        ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<>();
        ca.setTarget("System.err");
        ca.setContext(lc);
        ca.start();
        logger.detachAndStopAllAppenders();
        logger.addAppender(ca);
        logger.setLevel(Level.DEBUG);

        return logger;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-27 19:10:28

诀窍是将编码器添加到控制台,并确保记录器来自上下文。

代码语言:javascript
复制
private static Logger buildLogger() {

        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        lc.reset();
        Logger logger = lc.getLogger(henson.class);
        logger.detachAndStopAllAppenders();

        PatternLayoutEncoder ple = new PatternLayoutEncoder();
        ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
        ple.setContext(lc);
        ple.start();

        ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<>();
        ca.setTarget("System.err");
        ca.setContext(lc);
        ca.setEncoder(ple);
        ca.start();

        logger.addAppender(ca);

        logger.setLevel(Level.DEBUG);
        return logger;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29859459

复制
相关文章

相似问题

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