有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java配置LogBack/ConsolePender以写入STDERR

我想用ConsolePender配置Logback以使用stderr,而不是stdout。特别是,我希望使用纯代码来实现这一点,而不是使用properties/xml文件。这是我的尝试。关于此代码的关键注意事项:何时。调用reset()时(根据下面的代码),没有任何内容会注销。什么时候不调用reset(),日志都被发送到STDOUT(这表明下面的代码根本不起作用)

启用此功能的关键点是什么

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;
    }

共 (1) 个答案

  1. # 1 楼答案

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

    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;
        }