以下是我对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
有人可以告诉我,当我启动程序时,如何将日志附加到存在的日志文件中?非常感谢你能帮助我更接近答案!
答案 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遇到了同样的问题,这可以帮助他。