zoukankan      html  css  js  c++  java
  • logback日志无法按日期分割的问题

    发现在线上的时候,日志无法按日期分割的问题,所有日志都在第一天部署的那个日期的文件里面。

    背景是Springboot + logback

    原因是:

    之前是:

    timeBaseRollingPolicy来设定日志保留日期和格式:

    sizeBaseTriggerPolicy来设定最大日志文件

    但是!!!

    基于时间的滚动切割策略 TimeBasedRollingPolicy,每天0点自动生成一份新的日志文件,但里面包含了一段 triggeringPolicy触发策略,即最大单个文件超过 10MB 自动新成新日志文件, TimeBasedRollingPolicy 是基于时间的,不能和其他策略一起组合使用。

    也就是说这两个policy是冲突的。

    解决方法:

    改用使用时间和大小组合策略 SizeAndTimeBasedRollingPolicy:

    顺便上最后完整的配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <configuration debug="false">
    
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
       <property name="LOG_HOME" value="log" />
       
       <!-- linux上用绝对路径试试 -->
      <!--  <property name="LOG_HOME" value="/home/inforPoint/log" /> -->
       
        
        
        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
                <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> -->
                <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %black(${PID}) --- %green([%thread]) %boldMagenta(%logger{50}) : %cyan(%msg%n)</pattern>
                
            </encoder>
        </appender> 
        
        
        
        
        
        
        <!-- 按照每天生成日志文件 -->
        <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        
             <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>   <!--过滤掉error的级别-->
                <onMatch>DENY</onMatch>
                <onMismatch>ACCEPT</onMismatch>
            </filter>
        
        <!--     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                日志文件输出的文件名
                <FileNamePattern>${LOG_HOME}/inforPoint_log_%d{yyyy-MM-dd}.log</FileNamePattern>
                日志文件保留天数
                <MaxHistory>5</MaxHistory>
            </rollingPolicy> -->
            
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!-- 之前的  rollingPolicy和triggeringPolicy冲突了  用一个新的标签  结合两者 -->
                
                 <!--  日志文件输出的文件名 -->
                <FileNamePattern>${LOG_HOME}/inforPoint_log_%d{yyyy-MM-dd}_%i.log</FileNamePattern>
                
                      <!-- 日志文件保留天数 -->
                <MaxHistory>5</MaxHistory>
                
                <!-- 日志文件最大尺寸 -->
                <maxFileSize>10MB</maxFileSize>
                
            </rollingPolicy>
            
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID} --- [%thread]  %logger{50} - %msg%n</pattern>
            </encoder>
            
            
            <!--日志文件最大的大小-->
          <!--   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy> -->
        </appender>
        
        
        
        
        
        
        
        <!-- 按照每天生成error日志文件 -->
        <appender name="ERROR_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level><!--//打印error-->
            </filter>
            
            
           <!--  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                日志文件输出的文件名
                <FileNamePattern>${LOG_HOME}/inforPoint_error_log_%d{yyyy-MM-dd}.log</FileNamePattern>
                日志文件保留天数
                <MaxHistory>5</MaxHistory>
            </rollingPolicy> -->
            
            
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!-- 之前的  rollingPolicy和triggeringPolicy冲突了  用一个新的标签  结合两者 -->
                
                 <!--  日志文件输出的文件名 -->
                <FileNamePattern>${LOG_HOME}/inforPoint_error_log_%d{yyyy-MM-dd}_%i.log</FileNamePattern>
                
                      <!-- 日志文件保留天数 -->
                <MaxHistory>5</MaxHistory>
                
                <!-- 日志文件最大尺寸 -->
                <maxFileSize>10MB</maxFileSize>
                
            </rollingPolicy>
            
            
            
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID} --- [%thread]  %logger{50} - %msg%n</pattern>
            </encoder>
            
            
            <!--日志文件最大的大小-->
           <!--  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy> -->
            
            
        </appender>
        
        
        
        
      
    
        <!--myibatis log configure-->
        <logger name="com.apache.ibatis" level="TRACE"/>
        <logger name="java.sql.Connection" level="DEBUG"/>
        <logger name="java.sql.Statement" level="DEBUG"/>
        <logger name="java.sql.PreparedStatement" level="DEBUG"/>
        
        <!-- 可能是比较新的版本,会有很多thymeleaf configuration的日志,所以设个等级来避免 -->
        <logger name="org.thymeleaf.TemplateEngine.CONFIG" level="WARN" />
    
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
        
        
        <!--日志异步到数据库 -->
        <!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">-->
            <!--&lt;!&ndash;日志异步到数据库 &ndash;&gt;-->
            <!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">-->
                <!--&lt;!&ndash;连接池 &ndash;&gt;-->
                <!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">-->
                    <!--<driverClass>com.mysql.jdbc.Driver</driverClass>-->
                    <!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>-->
                    <!--<user>root</user>-->
                    <!--<password>root</password>-->
                <!--</dataSource>-->
            <!--</connectionSource>-->
        <!--</appender>-->
    </configuration>
    View Code

    参考博客:

    http://www.ibloger.net/article/3199.html——《坑爹的Logback日志无法按天切割问题》

  • 相关阅读:
    EasyMvc入门教程-高级控件说明(17)对话框控件
    EasyMvc入门教程-高级控件说明(16)信息框控件
    EasyMvc入门教程-高级控件说明(15)方位布局控件
    EasyMvc入门教程-高级控件说明(14)列布局控件
    Java5,6,7新特性
    C#文件压缩类
    FTP文件上传下载(C#)
    linux常见的系统故障排除
    sudo命令
    日志系统
  • 原文地址:https://www.cnblogs.com/wangshen31/p/11119318.html
Copyright © 2011-2022 走看看