2011-12-07 69 views
3

我想以編程方式配置LogBack的RollingFileAppenderch.qos.logback.core.rolling.RollingFileAppender),它似乎並沒有工作。當我使用FileAppender時,一切似乎都工作正常,完全相同的配置(較少的政策/觸發),所以我猜這不是一個權限問題。我試着評論所有的政策配置,這也沒有幫助。以下是我的示例代碼,帶有一些硬編碼值。此外,沒有任何錯誤是如此。當我調試LogBack源代碼時,我沒有看到任何可能出錯的東西。LogBack RollingFileAppender不寫日誌文件(儘管FileAppender的作品)

任何提示都是值得讚賞的。我需要在沒有配置文件的情況下運行,因爲這是我組織中的一個限制。我在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

我想出了這個問題。我忘了設置RollingPolicy,所以appender從未開始。我認爲它在無法啓動時會拋出異常,所以我忽略了這部分。 – juminoz

+0

上週在設置RollingPolicy後,它正常工作,並突然停止。我目前正在尋找一種以編程方式啓用調試模式的方式來查看發生了什麼。這絕對不是權限問題,因爲FileAppender仍然有效。另一個線程在這裏可用。 http://stackoverflow.com/questions/8482359/programmatically-enable-logback-in-debug-mode – juminoz

回答

5

的主要問題如下:

  • RollingFileAppender必須RollingPolicy
  • RollingFileAppender需要PatternLayoutEncoder代替PatternEncoder
  • RollingPolicy也必須啓動或某些屬性將是無效

是什麼讓我很難弄明白,我無法弄清楚如何讓BasicStatusManager打印出錯誤信息。我最終不得不使用下面的代碼來打印所有的東西。

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

有一個單獨的線程在上面的註釋中提到了爲什麼LogBack日誌消息沒有打印出來。我也有一個電子郵件線程與Nabble進行。只要我或某人能夠解決這個問題,就會在該線程中發佈解決方案。

+0

真的很有用的答案。我只想補充一點,在開始使用'RollingFileAppender'之前,必須先將'RollingPolicy'的父對象設置爲'RollingFileAppender'實例,然後'啓動()'滾動策略。它必須按這個順序。 –

相關問題