使用 log4j2 启动我的服务后,不要创建新的日志文件



以下是我对 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

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

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

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

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

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

如果您永远只需要一个日志文件 - 则创建常量文件名,例如fileName=app.log

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

public String getCurrentFileName(RollingFileManager manager)

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

最新更新