我想用ConsoleAppender配置Logback以使用stderr,而不是stdout。特别是,我希望使用纯代码来实现这一点,而不是使用属性/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;
}发布于 2015-04-27 19:10:28
诀窍是将编码器添加到控制台,并确保记录器来自上下文。
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;
}https://stackoverflow.com/questions/29859459
复制相似问题