我有一个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的文件属性,并在文件名中添加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 :(得分:1)
尚不支持延迟日志创建。但是有一个新的功能请求http://jira.qos.ch/browse/LBCORE-184
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>
答案 1 :(得分:0)
我认为文件名需要某种模式来识别你想要一个日期。如果那是logback中的支持..
aleroot-%d {DDMMYYYY}的.log