logback-spring.xml中按时间滚动和按大小分割的问题

    <appender name="YUNSTUDY-API-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </encoder>
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                ${LOG_HOME}/yunStudyApi-%d{yyyy-MM-dd}.log
            </FileNamePattern>
            <MaxHistory>90</MaxHistory>
        </rollingPolicy>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>50MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

  二话不说,线上代码!
  可以在上边看到,我设置了,按天进行滚动TimeBasedRollingPolicy,90天一次滚动(重新生成一个新文日志文件),如果遇到文件大小超过50M就触发分割SizeBasedTriggeringPolicy

然而,在实际中文件达到57M时都没有分割日志。

因为,TimeBasedRollingPolicySizeBasedTriggeringPolicy冲突,在根据网上的资料去看了logback的官网地址https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP

Size and time based rolling policy
Sometimes you may wish to archive files essentially by date but at the same time limit the size of each log file, in particular if post-processing tools impose size limits on the log files. In order to address this requirement, logback ships with SizeAndTimeBasedRollingPolicy.
Note that TimeBasedRollingPolicy already allows limiting the combined size of archived log files. If you only wish to limit the combined size of log archives, then TimeBasedRollingPolicy described above and setting the totalSizeCap property should be amply sufficent.
Here is a sample configuration file demonstrating time and size based log file archiving.
Example: Sample configuration for SizeAndTimeBasedFNATP (logback-examples/src/main/resources/chapters/appenders/conf/logback-sizeAndTime.xml)

基于大小和时间的滚动策略,有时您可能希望基本上按日期归档文件,但同时限制每个日志文件的大小,尤其是在后处理工具对日志文件施加大小限制的情况下。
为了解决此要求,Logback附带了SizeAndTimeBasedRollingPolicy
请注意,TimeBasedRollingPolicy已经允许限制归档日志文件的组合大小。 如果仅希望限制日志归档文件的总大小,则上述充分说明TimeTimedRollingPolicy并设置totalSizeCap属性即可。 这是一个示例配置文件,展示了基于时间和大小的日志文件归档。 示例:SizeAndTimeBasedFNATP的示例配置(logback-examples

<configuration>
  <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
       <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
       <maxFileSize>100MB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>
 
 
  <root level="DEBUG">
    <appender-ref ref="ROLLING" />
  </root>
 
</configuration>

如果为了在时间上进行归档同时又希望能在文件达到某个大小的时候进行分割,官方推荐了SizeAndTimeBasedRollingPolicy 。
重新修改xml配置。

<appender name="YUNSTUDY-API-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </encoder>
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>
                ${LOG_HOME}/yunStudyApi-%d{yyyy-MM-dd}-%i.log
            </FileNamePattern>
            <MaxHistory>90</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>50MB</MaxFileSize>
        </rollingPolicy>
    </appender>

  注意,我们在<FileNamePattern>中,有两个东西是少不了的,%d和%i,如果没有启动时会报错,%d是表明日期,%d{}中规定日期格式,%i是当我们在同一天分割日志时,指向的第几个序号,从0开始。

新增配置totalSizeCapcleanHistoryOnStart
totalSizeCap: 所有的日志的总共的大小。
cleanHistoryOnStart:项目启动的时候是否清楚之前的历史日志。

另外,我们在定义 日志的时候可以定义过滤器

                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>ERROR</level>
                    <onMatch>ACCEPT</onMatch>
                    <onMismatch>DENY</onMismatch>
                </filter>

知识点: 一个appender 可以包含多个filter ,常见的filter 是LevelFilter ,可以按日志级别过滤日志。

FilterReply的三个枚举:
   DENY: 放弃该日志,不再往下一个filter 传递
  ACCEPT: 处理该条日志,不再往下传递。
  NEUTRAL: 不处理,交给下一个filter 处理。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值