LogBack RollingFileAppender не записывает файл журнала (хотя FileAppender работает) - PullRequest
3 голосов
/ 07 декабря 2011

Я пытаюсь программно настроить 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");

1 Ответ

6 голосов
/ 14 декабря 2011

Основные проблемы заключаются в следующем:

  • RollingFileAppender должен иметь RollingPolicy
  • RollingFileAppender требует PatternLayoutEncoder вместо PatternEncoder
  • RollingPolicy также должен быть запущен, иначе некоторые свойства будут нулевыми

Что очень трудно понять, так это то, что я не мог понять, как заставить BasicStatusManager распечатать сообщение об ошибке. В итоге мне пришлось использовать следующий код, чтобы распечатать все.

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

Существует отдельная ветка, как упоминалось в комментарии выше о том, почему сообщения журнала LogBack не распечатываются. У меня также есть ветка электронной почты с Nabble. Опубликуем решение в этой ветке, как только я или кто-то это выясним.

...