我有一个logback.xml配置文件,如下所示:
<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 appender的文件属性,并在文件名中添加一个dateppattern,我已经尝试过这个代码:
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")
上。
是否有一个设置来实现?
暂不支持延迟日志创建。但是它有一个新的特性请求http://jira.qos.ch/browse/LBCORE-184
一个RollingFileAppender
(链接)和一个TimeBasedRollingPolicy
(链接)在这里可能会有很大的帮助。这允许您指定文件模式,并且当您希望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>
我认为文件名需要某种模式来识别您想要一个日期。如果这是logback的支持…
aleroot - % d {ddMMyyyy} . log