LogBack RollingFileAppender不写日志文件(虽然FileAppender工作)

jum*_*noz 3 java logging file logback rollingfileappender

我正在尝试以编程方式配置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");
Run Code Online (Sandbox Code Playgroud)

jum*_*noz 6

关键问题如下:

  • RollingFileAppender 一定有 RollingPolicy
  • RollingFileAppender需要PatternLayoutEncoder而不是PatternEncoder
  • RollingPolicy 必须也可以启动或某些属性为null

这让我很难理解的是,我无法弄清楚如何BasicStatusManager打印出错误信息.我最终不得不使用以下代码打印出来.

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

上面的注释中提到了一个单独的线程,用于解释为什么LogBack日志消息没有打印出来.我还有一个与Nabble有关的电子邮件主题.只要我或某人能够解决这个问题,我就会在该线程中发布解决方案.