首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LogBack RollingFileAppender不写入日志文件(尽管FileAppender可以工作)

LogBack RollingFileAppender不写入日志文件(尽管FileAppender可以工作)
EN

Stack Overflow用户
提问于 2011-12-08 03:44:32
回答 1查看 5.2K关注 0票数 3

我尝试以编程方式配置LogBack的RollingFileAppender (ch.qos.logback.core.rolling.RollingFileAppender),但似乎不起作用。当我使用FileAppender时,在完全相同的配置(更少的策略/触发器)下,一切似乎都工作得很好,所以我猜这不是权限问题。我尝试注释掉所有的策略配置,但也没有帮助。下面是我的示例代码,其中包含一些硬编码的值。此外,也没有任何错误。当我调试LogBack源代码时,我没有发现任何可能出错的地方。

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

代码语言:javascript
复制
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");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-14 07:24:07

关键问题如下:

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

让这个问题变得非常难以理解的是,我不知道如何让BasicStatusManager打印出错误消息。最后,我不得不使用下面的代码来打印所有内容。

代码语言:javascript
复制
for(Status status : logger.getLoggerContext().getStatusManager().getCopyOfStatusList()){
    System.out.println(status.getOrigin() + " - " + status.getMessage());
}

正如上面的评论中提到的那样,还有一个单独的线程在解释为什么LogBack日志消息没有打印出来。我还有一个关于Nabble的电子邮件线程。我会在那个帖子中发布解决方案,只要我或其他人能弄清楚这一点。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8421505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档