applerosa
麥田的預言
2018-03-01 03:27
采纳率: 100%
浏览 3.0k
已采纳

log4j2中关于日志按小时滚动的疑问

就是当配置了:

<RollingFile name="run" fileName="log/run.log" filePattern="log/run.log.%d{yyyy-MM-dd-HH}">
 <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="1" />
</Policies>

如果每时每刻持续有数据操作,log4j2确实会在整点生成上一个小时的日志文件,

但是如果,从某个小时开始,突然没有数据操作了,那么这个小时的数据就会一直没有被滚动封装,有解决策略么?

例子:假设我有一个接收数据的常驻服务端,10点开始,生成第一个run.log,然后10点到12点每分钟都有数据写入,那么确实会在11点整点的时候生成run.log.2018-01-01-10,会在12点滚动生成run.log.2018-01-01-11,
但是,如果我10:30之后,到1点就没有数据写入了,那么他11点整点个12点就不会滚动生成run.log.2018-01-01-10和run.log.2018-01-01-11,10点到10:30的数据依然位于run.log里面;

现在有个需求,就是即使没有数据,那么到整点也滚动生成一个文件,比如10:30之后就没数据进来了,那么11点就滚动出10点的日志un.log.2018-01-01-10,11:00到12:00没数据进来,那么就滚动出11点的日志run.log.2018-01-01-11,此时这个日志文件为空都可以,有什么解决方案么?通过重写滚动策略可以实现么?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • lizimnin
    lizimnin 2018-03-01 03:49
    已采纳

    这还不简单,到时间程序人为生成日志文件不就行了吗

    点赞 评论
  • u012061633
    我不知道123456 2018-03-01 05:31
    <property name="applicationName" value="cms" />
    
    <appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/tmp/logs/${applicationName}_info.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>/tmp/logs/${applicationName}_info.log.%d{yyyy-MM-dd}</fileNamePattern>
    
            <!-- 保留30天的历史日志 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log_pattern}</pattern>
        </encoder>
    </appender>
    
    点赞 评论
  • qq_35598801
    罗吒太子 2019-06-28 10:00

    你这个问题解决了吗,我配置了两种策略,大小超过100m或超过当天,就滚动,可是昨天的65m在昨天24点并没有滚动

    点赞 评论

相关推荐