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">
            <FileNamePattern>
                ${LOG_HOME}/yunStudyApi-%d{yyyy-MM-dd}.log
            FileNamePattern>
            <MaxHistory>90MaxHistory>
        rollingPolicy>
        
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>50MBMaxFileSize>
        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.txtfile>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txtfileNamePattern>
       
       <maxFileSize>100MBmaxFileSize>    
       <maxHistory>60maxHistory>
       <totalSizeCap>20GBtotalSizeCap>
    rollingPolicy>
    <encoder>
      <pattern>%msg%npattern>
    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.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>
                ${LOG_HOME}/yunStudyApi-%d{yyyy-MM-dd}-%i.log
            FileNamePattern>
            <MaxHistory>90MaxHistory>
            
            <MaxFileSize>50MBMaxFileSize>
        rollingPolicy>
    appender>

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

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

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

                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>ERRORlevel>
                    <onMatch>ACCEPTonMatch>
                    <onMismatch>DENYonMismatch>
                filter>

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

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

你可能感兴趣的:(问题记录,logback)