一个由logback日志配置引起的对RollingPolicy简单研究

之前对项目通过logback进行了日志的配置,配置的模板是从网上copy过来的
上一篇文章传送门

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n DEBUG
    
        
        ${LOG_HOME}/${LOG_NAME}.info.log.%d{yyyy-MM-dd}.log
        
        30
    
    
        
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
    
    
    
        10MB
    

    
        INFO
        ACCEPT
        DENY
    





    
        
        ${LOG_HOME}/${LOG_NAME}.error.log.%d{yyyy-MM-dd}.log
        
        30
    
    
        
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
    
    
    
        10MB
    

    
        ERROR
        ACCEPT
        DENY
    






    
    
    

这个日志的配置的配置,本来希望达到的目的是按时间和大小生成日志文件,结果最后按时间和大小生成日志文件,这个功能并没有实现。
各方查找之后发现是日志滚动策略的问题,之前也没有深究过这个问题。一下是改动后的一个appender


    
    ${LOG_HOME}/${LOG_NAME}.info.log.%d{yyyy-MM-dd-HH}.%i.log
    
    7
    
    100MB


    
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n



    INFO

重点关注日志滚动策略:SizeAndTimeBasedRollingPolicy

查询官方文档后:https://logback.qos.ch/manual/appenders.html
确认rolling policies有 TimeBasedRollingPolicy,SizeAndTimeBasedRollingPolicy,FixedWindowRollingPolicy,
接下来详细说说这三种日志滚动策略:
1.TimeBasedRoolingPolicy 基于时间滚动策略:
引用官网原话,时间滚动策略可以基于时间滚动按时间生成日志。

TimeBasedRollingPolicy is possibly the most popular rolling policy. It defines a rollover policy based on time, for example by day or by month. TimeBasedRollingPolicy assumes the responsibility for rollover as well as for the triggering of said rollover. Indeed, TimeBasedTriggeringPolicy implements both RollingPolicy and TriggeringPolicy interfaces.

下面是官网给出的示例:


  
    logFile.log
    
      
      logFile.%d{yyyy-MM-dd}.log

      
      30
      3GB

    

    
      %-4relative [%thread] %-5level %logger{35} - %msg%n
    
   

  
    
  

紧跟着又给出的多个JVM写同一个日志文件的配置,主要是加一行开启(节俭)prudent模式


  
    
    true
    
      logFile.%d{yyyy-MM-dd}.log
      30 
      3GB
    

    
      %-4relative [%thread] %-5level %logger{35} - %msg%n
    
   

  
    
  

2.SizeAndTimeBasedRollingPolicy 基于大小和时间的滚动策略

引用官网原话,这个策略出现的原因就是对时间滚动策略的一个补充,使其不仅按时间进行生成而且考虑到文件大小的原因,因为在基于时间的滚动策略生成的日志文件,只是对一段时间总的日志大小做了限定,但是没有对每个日志文件的大小做限定,这就会造成个别日志文件过大,后期传递,阅读困难的问题,所以就有了这第二个策略。

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.

下面是官网给的示例:


  
    mylog.txt
    
      
      mylog-%d{yyyy-MM-dd}.%i.txt
       
       100MB    
       60
       20GB
    
    
      %msg%n
    
  


  
    
  


3.FixedWindowRollingPolicy 基于固定窗口的滚动策略
这个策略的出现,我个人猜测是因为需要日志文件保持为某个特定的数量,防止滚动测策略导致过多的日志文件出现。这个策略出现得配合triggeringPolicy,给一个什么时候日志滚动一次的控制,这部分是跟上面两种策略所不一样的地方。
引用官网给出的解释,这解释也很好懂,我就不翻译了

一个由logback日志配置引起的对RollingPolicy简单研究_第1张图片
下面是官网给出的示例:


  
    test.log

    
      tests.%i.log.zip
      1
      3
    

    
      5MB
    
    
      %-4relative [%thread] %-5level %logger{35} - %msg%n
    
  
        
  
    
  

以上就是logback日志滚动的三种策略。

你可能感兴趣的:(springboot,logback,rollingPolicy,好用的工具系列)