zoukankan      html  css  js  c++  java
  • [ISSUE] Logback TimeBasedRollingPolicy not rolling every day.

    [ISSUE] Logback TimeBasedRollingPolicy not rolling every day.

    问题,一开始程序运行正常,日志数据记录正常,但是在间隔一段时间后,日志就停止记录。

    一开始认为可能是系统挂了,怀疑会不会产生了死锁,导致了系统无法IO,但是CPU指标平稳,内存指标平稳,IO指标平稳。

    各个接口运行正常,dump的线程也没有deadlock。

    问题指向到我最不想看的一部分,log module。

    因为项目中的代码太多,log module当时就交给其他同事写了。和大家一样,从网上CV了一份,然后就放进去了。一开始都是正常的。但是后面测试的时候需要查看日志,发现日志没了。

    排查问题源头,可能是由于在配置logback xml的内容出现了问题。

    疑似问题的XML

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true">
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_HOME" value="/data/logs"/>
        <property name="APP_NAME" value="xxxxx"/>
        <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{50} - %msg%n"/>
        <!--输出到控制台-->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %white(%msg%n)</pattern>
                <!--<charset>utf8</charset>-->
            </encoder>
        </appender>
        <!-- 按照每天生成日志文件 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/${APP_NAME}/app/logback.%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %msg%n</pattern>
            </layout>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>100MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
       
        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE"/>
        </root>
        <logger name="org.springframework" level="ERROR"/>  
    </configuration>
    

    在排查后发现可能是SizeBasedTriggeringPolicy,TimeBasedRollingPolicy 冲突了

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true">
    
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_HOME" value="/data/logs"/>
    
        <property name="APP_NAME" value="xxxxxxxxxx"/>
    
        <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{50} - %msg%n"/>
        <!--输出到控制台-->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %white(%msg%n)</pattern>
                <!--<charset>utf8</charset>-->
            </encoder>
        </appender>
        <!-- 按照每天生成日志文件 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/${APP_NAME}/app/logback.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
                <MaxFileSize>100MB</MaxFileSize>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %msg%n</pattern>
            </layout>
        </appender>
    
        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE"/>
        </root>
        <logger name="org.springframework" level="ERROR"/>
    </configuration>
    
    

    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)

    Tag

    issue

  • 相关阅读:
    【原创】贴片电容的测量方法。。。这是我从自己QQ空间转过来的,本人实操!
    CentOS6.4安装Apache+MySQL+PHP
    第一次在博客园写博客。。。新人
    C# 简单生成双色球代码
    从客户端中检测到有潜在危险的 Request.Form 值 方法
    经典实例
    js鼠标键禁用功能
    逻辑思维题
    C#运算符笔记
    C#基础
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/14859093.html
Copyright © 2011-2022 走看看