使用log4j2

时间:2017-07-18 12:57:32

标签: append log4j2 rollover rollingfileappender

以下是我对log4j2的配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" name="MyApp" packages="com.swimap.base.launcher.log">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app-${date:MM-dd-yyyy-HH-mm-ss-SSS}.log"
                 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      </PatternLayout>
      <Policies>
        <SizeBasedTriggeringPolicy size="1 KB"/>
      </Policies>
      <DefaultRolloverStrategy max="3"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="trace">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

问题是,每次启动我的服务时,即使旧的日志未达到特定大小,也会创建新日志。如果程序频繁重启,我会得到许多日志文件以“.log”结尾,永远不会被压缩。

我得到的日志是这样的:

/log4j2/logs
/log4j2/logs/2017-07
/log4j2/logs/2017-07/app-07-18-2017-1.log.gz
/log4j2/logs/2017-07/app-07-18-2017-2.log.gz
/log4j2/logs/2017-07/app-07-18-2017-3.log.gz
/log4j2/logs/app-07-18-2017-20-42-06-173.log
/log4j2/logs/app-07-18-2017-20-42-12-284.log
/log4j2/logs/app-07-18-2017-20-42-16-797.log
/log4j2/logs/app-07-18-2017-20-42-21-269.log

有人可以告诉我,当我启动程序时,如何将日志附加到存在的日志文件中?非常感谢你能帮助我更接近答案!

2 个答案:

答案 0 :(得分:0)

我认为你的问题是你的log4j2配置文件中有fileName="logs/app-${date:MM-dd-yyyy-HH-mm-ss-SSS}.log

此fileName模板意味着log4j2将创建日志文件,其名称包含其名称中的当前日期+小时+分钟+秒+毫秒。

您应该删除HH-mm-ss-SSS部分,这样您就可以拥有每日滚动文件,并且不会在每次重启应用时创建新文件。

您可以使用模板并选择所需的格式。

如果您只想要一个日志文件 - 那么创建常量fileName,如fileName=app.log

答案 1 :(得分:0)

实现这一点并不难。有一个接口DirectFileRolloverStrategy,实现如下方法:

public String getCurrentFileName(RollingFileManager manager)

Mybe遇到了同样的问题,这可以帮助他。