Logback创建重复的日志文件填满硬盘驱动器

时间:2016-10-27 15:45:16

标签: java logback

我支持使用logback生成日志文件的解决方案。问题是生成的日志文件创建得太快,以至于它们正在填满硬盘驱动器并导致系统崩溃。

在分析创建的日志文件时,我们可以看到它们的大小是5MB,当它们翻转时,下一个日志文件是与前一个日志文件相同的数据,只添加了15-20条跟踪线,然后它将创建下一个日志文件相同的格式并继续快速。有没有人见过这种使用logback的行为?问题出在esuiteStore * logs:

$ {esStoreLogFilePath} / esuiteStore-%d {YYYY-MM-DD}。%i.log

我们的其他客户没有看到这种情况,我们无法在测试环境中重新创建它(使用相同的SW和logback.xml)。在我的系统上,正确创建了日志文件(相同的日志记录不会复制到下一个翻转文件中)。我的理解是它应该创建5MB翻转日志文件,并节省四天的日志记录。

我不确定我使用的是什么版本的logback但是我在c:\ java目录中找到了以下内容。

logback-classic-0.9.26.jar文件中的Manifest.mf Build-Jdk:1.6.0_16

安装了Java(TM)6 Update 13 6.0.130。

Logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>SSCStoreServer</contextName>
    <jmxConfigurator/>
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <level value="INFO" />
        <file>${esStoreLogFilePath}/esuiteStore.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${esStoreLogFilePath}/esuiteStore-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <MaxHistory>4</MaxHistory>
            <MinIndex>1</MinIndex>
            <MaxIndex>4</MaxIndex>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %date %level [%thread] %logger{10}:%L %msg%n
            </Pattern>
        </layout>
        <filter class="com.ncr.ssc.cf.common.util.LoggerNameFilter">
            <LoggerName>org.hibernate</LoggerName>
            <OnMismatch>NEUTRAL</OnMismatch>
            <OnMatch>DENY</OnMatch>
        </filter>
    </appender>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <level value="INFO" />
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %date %level [%thread] %logger{10}:%L %msg%n
            </Pattern>
        </layout>
        <filter class="com.ncr.ssc.cf.common.util.LoggerNameFilter">
            <LoggerName>org.hibernate</LoggerName>
            <OnMismatch>NEUTRAL</OnMismatch>
            <OnMatch>DENY</OnMatch>
        </filter>
    </appender>
    <appender name="METRICS"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <level value="INFO" />
        <file>${esStoreLogFilePath}/personalizationMetrics.csv</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <FileNamePattern>personalizationMetrics%i.csv</FileNamePattern>
            <MinIndex>1</MinIndex>
            <MaxIndex>2</MaxIndex>
        </rollingPolicy>
        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>5MB</MaxFileSize>
        </triggeringPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %msg%n
            </Pattern>
        </layout>
        <filter class="com.ncr.ssc.ss.personalizationcontroller.LoggerMetricsFilter">
            <LoggerName>Metrics</LoggerName>
            <OnMismatch>DENY</OnMismatch>
            <OnMatch>ACCEPT</OnMatch>
        </filter>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="METRICS" />
    </root>
</configuration>

1 个答案:

答案 0 :(得分:0)

问题是有多个进程正在尝试访问日志文件,因此一旦尝试翻转就开始创建具有相同数据的多个日志文件。进程列表显示了多个Java运行实例。