【问题标题】:RollingFileAppender not clearing log file in log4j2 version 2.5RollingFileAppender 未清除 log4j2 2.5 版中的日志文件
【发布时间】:2016-04-28 14:05:36
【问题描述】:

我们在 Window 7 Enterprise 上使用 log4j2。 JBoss Developer Studio 8(这个真的没关系)

RollingFileAppender 正确滚动日志文件,但原始日志文件保留旧日志并继续增加大小。有一个与此相关的 JIRA 错误 (LOG4J2-904)。我遵循了一些选项,例如

  • fileIndex="min" 或 fileIndex="max"
  • 使用 RollingRandomAccessFile 而不是 RollingFile。

一些 cmets 指出问题已从 log4j 2.4.1 版本开始修复。但是,我在 log4j 2.5 中仍然看到同样的问题。

我尝试同时记录到 RollingFile 和 RollingRandomAccessFile 附加程序。包含Here is the image of Log folder from rollover中的日志文件夹的图像

这是我的 log4j2.xml

<Configuration>
<Properties>
    <property name="appname">myapp</property>
    <Property name="log-path">${server.dir}/myapp</Property>
</Properties>
<Appenders>
    <RollingFile name="DATED_ROLLING_FILE" fileName="${log-path}/${myapp}.log" filePattern="${log-path}/${myapp}_%d{MM-dd-yyyy}-%i.log" maxFileSize="40 KB">
        <PatternLayout>
            <Pattern>%d: %-5p [%c{1}]:%L - %M %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <OnStartupTriggeringPolicy />
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            <SizeBasedTriggeringPolicy size="40 KB" />
        </Policies>
        <DefaultRolloverStrategy fileIndex="min" max="100" />
    </RollingFile>

    <RollingRandomAccessFile name="DATED_RAC_APPENDER" fileName="${log-path}/epermitsrac.log"
    filePattern="${log-path}/epermitsrac_%d{MM-dd-yyyy}-%i.log" >
        <PatternLayout>
            <Pattern>%d: %-5p [%c{1}]:%L - %M %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            <SizeBasedTriggeringPolicy size="40 KB" />
        </Policies>
        <DefaultRolloverStrategy fileIndex="min" max="100" />
    </RollingRandomAccessFile>
</Appenders>
<Loggers>
    <Root level="INFO">
        <AppenderRef ref="DATED_ROLLING_FILE" />
        <AppenderRef ref="DATED_RAC_APPENDER" />
    </Root>
</Loggers>
</Configuration>

Here is the image of Log folder from rollover。如您所见,它不会清除原始文件。

是否有其他人遇到过同样的问题,是否有解决方法。

【问题讨论】:

  • 你能把 TimeBasedTriggeringPolicy 换成 CronTriggeringPolicy 看看有什么不同吗?
  • 您是否有多个进程或网络应用具有相同的配置(写入同一个文件)?
  • 感谢您的回复。 @RemkoPopma,我们没有多个网络应用程序写入同一个文件。抱歉回复晚了。
  • @rgoers 我还没有尝试过 CronTriggeringPolicy。感谢您的建议。

标签: java logging log4j2 rollingfileappender


【解决方案1】:

我已经尝试了以下配置,它工作正常,除了最新的文件将没有日期。

log4j2.properties 配置

rootLogger.level = all
appenders = rolling, console

status = warn

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d [%-5p] (%F:%M:%L) %m%n

# Rolling file based on date for day wise
appender.rolling.type = RollingFile
appender.rolling.name = rolling

#if i use below file name the rollover will not happenning as expected
#appender.rolling.fileName = E:/LOGS/${date:yyyyMMdd}_test.log 

#with below filename name the rollover will happen as expected 
appender.rolling.fileName = E:/LOGS/test.log
appender.rolling.filePattern = E:/LOGS/%d{yyyyMMdd}_test.log

appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d [%-5p] [%F:%M:%L] %m%n
appender.rolling.policies.type = Policies

appender.rolling.policies.time.type = TimeBasedTriggeringPolicy

#use below for day wise roll over 
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
 
rootLogger.appenderRefs = rolling, console

rootLogger.appenderRef.console.ref = console
rootLogger.appenderRef.rolling.ref = rolling

rootLogger.appenderRef.stdout.ref = console, rolling

【讨论】:

  • 这将生成如下文件: test.log (最新日志) 20220325_test.log 20220324_test.log 20220323_test.log
猜你喜欢
  • 1970-01-01
  • 2019-10-27
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多