我尝试以编程方式配置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");发布于 2011-12-14 07:24:07
关键问题如下:
RollingFileAppender必须具有RollingPolicyRollingFileAppender,需要PatternLayoutEncoder而不是PatternEncoderRollingPolicy还必须启动,否则某些属性将为空让这个问题变得非常难以理解的是,我不知道如何让BasicStatusManager打印出错误消息。最后,我不得不使用下面的代码来打印所有内容。
for(Status status : logger.getLoggerContext().getStatusManager().getCopyOfStatusList()){
System.out.println(status.getOrigin() + " - " + status.getMessage());
}正如上面的评论中提到的那样,还有一个单独的线程在解释为什么LogBack日志消息没有打印出来。我还有一个关于Nabble的电子邮件线程。我会在那个帖子中发布解决方案,只要我或其他人能弄清楚这一点。
https://stackoverflow.com/questions/8421505
复制相似问题