典型的logback appender配置是
<appender name="NAME"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>FILEPATH.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>FILEPATH.%d{yyyy-MM-dd-HH}.log</fileNamePattern>
<maxHistory>24</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
通常它对我来说很好。但是我发现当没有记录附加到记录器的日志时,它不会像滚动策略一样拆分日志文件。
请告诉我如何将其配置为每小时拆分日志文件,即使几小时内没有日志记录。如果任何小时都没有日志记录,我需要回溯以创建该小时的空文件。
答案 0 :(得分:1)
我遇到了同样的问题,我想默认情况下,logback无法做到这一点。
我在积压的待办事项列表中发现了此问题,可以正确处理此问题:https://jira.qos.ch/browse/LOGBACK-554,并且它仍处于打开状态。
我现在所做的是基于以下内容实施我自己的滚动追加程序策略:https://ronanquillevere.github.io/2015/08/04/rolling-log-15-min.html
您可以扩展RollingFileAppender类并重写rollover方法,如下所示:
public class CustomAppender<E> extends RollingFileAppender<E>
{
private static long start = System.currentTimeMillis();
private int rollOverTimeInMinutes = 60;
@Override
public void rollover()
{
long currentTime = System.currentTimeMillis();
int maxIntervalSinceLastLoggingInMillis = rollOverTimeInMinutes * 60 * 1000;
if ((currentTime - start) >= maxIntervalSinceLastLoggingInMillis)
{
super.rollover();
start = System.currentTimeMillis();
}
}
}
在登录文件xml配置中,您只需在appender属性上设置自定义pollicy:
<appender name="FILE" class="<your-package>.CustomAppender" >