我正在尝试以编程方式配置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");
答案 0 :(得分:6)
关键问题如下:
RollingFileAppender
必须RollingPolicy
RollingFileAppender
需要PatternLayoutEncoder
而不是PatternEncoder
RollingPolicy
也必须启动或某些属性为空让我很难理解的是,我无法弄清楚如何使BasicStatusManager
打印出错误信息。我最终不得不使用以下代码打印出来。
for(Status status : logger.getLoggerContext().getStatusManager().getCopyOfStatusList()){
System.out.println(status.getOrigin() + " - " + status.getMessage());
}
上面的评论中提到了一个单独的线程,为什么LogBack日志消息没有打印出来。我还有一个与Nabble有关的电子邮件主题。只要我或其他人可以解决这个问题,就会在该线程中发布解决方案。