3

我正在尝试以编程方式配置 LogBack RollingFileAppender( ch.qos.logback.core.rolling.RollingFileAppender),但它似乎不起作用。当我使用时FileAppender,使用完全相同的配置(更少的策略/触发器)似乎一切正常,所以我猜这不是权限问题。我尝试注释掉所有策略配置,但这也无济于事。下面是我的示例代码,带有一些硬编码值。此外,从来没有任何错误。当我调试 LogBack 源代码时,我没有看到任何可能出错的地方。

任何提示都是值得赞赏的。我需要在没有配置文件的情况下让它工作,因为这在我的组织中是一个限制。我正在 MacBook 上对此进行测试。

Logger logger = (Logger)LoggerFactory.getLogger(applicationName); 
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
lc.reset(); 

RollingFileAppender<ILoggingEvent> fileAppender = 
    new RollingFileAppender<ILoggingEvent>(); 
fileAppender.setAppend(true); 
fileAppender.setFile("/Users/Jack/Desktop/logs/" + applicationName + ".log"); 
fileAppender.setContext(lc); 

SizeBasedTriggeringPolicy<ILoggingEvent> rPolicy = 
    new SizeBasedTriggeringPolicy<ILoggingEvent>("20MB"); 
fileAppender.setTriggeringPolicy(rPolicy); 
TimeBasedRollingPolicy<ILoggingEvent> tPolicy = 
    new TimeBasedRollingPolicy<ILoggingEvent>(); 
tPolicy.setFileNamePattern("/archive/" + applicationName + ".%d"); 
tPolicy.setMaxHistory(180); 
tPolicy.setParent(fileAppender); 
tPolicy.setContext(lc); 

PatternLayout pl = new PatternLayout(); 
pl.setPattern("%d %5p %t [%c:%L] %m%n)"); 
pl.setContext(lc); 
pl.start(); 

fileAppender.setLayout(pl); 
fileAppender.start(); 

logger.addAppender(fileAppender); 
logger.setLevel(Level.DEBUG); 

logger.debug("Test message");
4

1 回答 1

6

关键问题如下:

  • RollingFileAppender一定有RollingPolicy
  • RollingFileAppender需要PatternLayoutEncoder而不是PatternEncoder
  • RollingPolicy也必须启动,否则某些属性将为空

使这很难弄清楚的是我无法弄清楚如何BasicStatusManager打印出错误消息。我最终不得不使用以下代码将所有内容打印出来。

for(Status status : logger.getLoggerContext().getStatusManager().getCopyOfStatusList()){
    System.out.println(status.getOrigin() + " - " + status.getMessage());
}

正如上面的评论中提到的,关于 LogBack 日志消息没有打印出来的原因,有一个单独的线程正在进行。我还有一个关于 Nabble 的电子邮件线程。一旦我或某人弄清楚这一点,就会在该线程中发布解决方案。

于 2011-12-13T23:24:07.283 回答