我正在尝试以编程方式配置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");

最佳答案

关键问题如下:

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

  • 使得这一点很难弄清的是,我无法弄清楚如何使BasicStatusManager打印出错误消息。我最终不得不使用以下代码来打印所有内容。
    for(Status status : logger.getLoggerContext().getStatusManager().getCopyOfStatusList()){
        System.out.println(status.getOrigin() + " - " + status.getMessage());
    }
    

    如上面的注释中所述,还有一个单独的线程继续讨论为什么LogBack日志消息未打印出来。我也有一个关于Nabble的电子邮件主题。一旦我或有人知道了这一点,就会在该线程中发布解决方案。

    07-24 09:15