首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定时回滚登录RollingFileAppender

定时回滚登录RollingFileAppender
EN

Stack Overflow用户
提问于 2015-09-02 13:04:47
回答 1查看 1.7K关注 0票数 2

典型的logback附加器配置为

代码语言:javascript
复制
<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>

通常它对我来说很好。但我发现,如果没有附加到所考虑的记录器的日志,它不会按照指定的rollingPolicy拆分日志文件。

请告诉我如何配置它来拆分每小时的日志文件,即使有几个小时没有日志记录。如果没有任何小时的日志记录,我需要logback为该小时创建一个空文件。

EN

回答 1

Stack Overflow用户

发布于 2018-11-22 21:54:53

我也遇到过同样的问题,我猜logback默认不能做到这一点。

我在logback backlog中发现了这个问题来解决这个问题:https://jira.qos.ch/browse/LOGBACK-554,它仍然是开放的。

我现在所做的是在此基础上实现我自己的滚动附加器策略:https://ronanquillevere.github.io/2015/08/04/rolling-log-15-min.html

您可以扩展RollingFileAppender类并覆盖翻转方法,如下所示:

代码语言:javascript
复制
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();
        }
    }
}

在logback文件xml配置中,您只需在appender属性上设置您的自定义策略:

代码语言:javascript
复制
<appender name="FILE" class="<your-package>.CustomAppender" >
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32344977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档