2011-12-08 34 views
1

我有一個看起來像下面這樣的logback.xml配置文件:的logback在運行時更改配置和日誌文件的創建問題

<configuration> 

<property name="defaultPattern" 
     value="%d{dd/MM/yyyy HH:mm:ss.SSS} [%thread] %-5level - %msg%n" /> 

<!-- Appenders Configuration --> 
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
    <target>System.err</target> 
    <filter class="com.aleroot.ErrOutFilter" /> 
    <encoder> 
     <pattern>${defaultPattern}</pattern> 
    </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
    <file>aleroot.log</file> 
    <append>true</append> 
    <encoder> 
     <pattern>${defaultPattern}</pattern> 
    </encoder> 
    </appender> 


    <!-- Output Configuration --> 
    <root level="debug"> 
    <appender-ref ref="FILE" /> 
    <appender-ref ref="CONSOLE"/> 
    </root> 

    <logger name="mainLogger" level="debug"> 
    <appender-ref ref="FILE" /> 
    <appender-ref ref="CONSOLE"/> 
</logger> 

</configuration> 

我想在運行時改變FILE附加器的文件和財產添加DatePattern的文件名,我已經嘗試使用此代碼:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
      ch.qos.logback.classic.Logger logbackLogger = lc.getLogger("mainLogger"); 
      FileAppender<ILoggingEvent> fileAppender = 
        (FileAppender<ILoggingEvent>) logbackLogger.getAppender("FILE"); 
       if(fileAppender != null) { 
       fileAppender.stop(); 
       fileAppender.setFile("aleroot-ddMMyyyy.log"); 
       fileAppender.setContext(lc); 
       fileAppender.start(); 
       } 

的問題是,文件aleroot.log創建反正也是,如果我已經改變了文件名,此外我得到了另一個文件,完全命名爲:aleroot-ddMMyyyy.log,而我想要一個文件名,如aleroot-04122011.log。我怎麼能做到這一點?

是否有避免在LoggerFactory.getLogger("mainLogger")調用中創建日誌文件的設置?我希望僅在第一次寫入日誌文件時創建日誌文件,因此不需要創建空白日誌文件。 日誌文件應在我第一次登錄日誌時創建,例如在第一個logger.debug("Something.log")

有沒有一個設置來實現這一目標?

+0

至於懶惰的日誌文件創建,看起來好像它還不被支持,但是[LB中有一個功能請求](http://jira.qos.ch/browse/LBCORE-184)。 – srkavin

回答

1

懶日誌創建尚不支持。但有一個新的功能要求它http://jira.qos.ch/browse/LBCORE-184

A RollingFileAppender(link)TimeBasedRollingPolicy(link)可能在這裏很有幫助。這允許您指定文件模式,並且還希望LB創建新日誌文件(每分鐘/小時或每日,每週或每月)。

來自給定站點的示例配置。

<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>logFile.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>aleroot-%d{yyyy-MM-dd}.log</fileNamePattern> 

     <!-- keep 30 days' worth of history --> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 

    <encoder> 
     <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
    </appender> 

    <root level="DEBUG"> 
    <appender-ref ref="FILE" /> 
    </root> 
</configuration> 
0

我會認爲文件名需要某種模式來識別你想要一個日期。如果是在supportet的logback所有..

aleroot-%d {} DDMMYYYY的.log

+0

它確切地顯示:aleroot-%d {ddMMyyyy} .log。 – aleroot

相關問題