log4j2 如何设置日志压缩延迟

2021-09-07 12:01:30 +08:00
 SimpleSS

请教大家一个 log4j2 的问题:

背景:在项目中目前使用 log4j2 采用 DirectWriteRolloverStrategy 方式每隔一个小时生成一个日志文件 1.log ,一个小时后生成一个新的日志文件 2.log ,同时将老的日志文件 1.log 压缩成 1.log.gz 。

问题:但是日志收集软件有概率没有读取完 1.log 或者崩溃重启,之后再读之前的那个旧的时 2.log 已经生成了,1.log 变成了压缩文件无法再读取了。有没有希望通过配置来设置压缩时间延后几个小时,生成 2.log 时不要马上将 1.log 压缩,或者保留几个未压缩过一段时间再一起压缩?

可以通过单写脚本的方式来压缩,但是 leader 更希望用 log4j2 的配置来搞这个问题,各位有好的什么办法吗。

3015 次点击
所在节点    Java
21 条回复
sutra
2021-09-07 13:47:21 +08:00
日志采集脚本增加读取压缩文件是不是更简单?
cheng6563
2021-09-07 13:51:13 +08:00
log4j 不要压了,服务器另外写个 cron 去压。
liangch
2021-09-07 13:57:30 +08:00
cron+linux 随便一个啥命令压多方便
Mohanson
2021-09-07 14:04:20 +08:00
没有写本地日志的习惯了, 都是直接往 stdout 塞
v2orz
2021-09-07 14:06:11 +08:00
自己写一个 appender 实现,啥都行
SimpleSS
2021-09-07 14:07:43 +08:00
@sutra 日志收集的是个软件,问了运维说没法搞压缩
SimpleSS
2021-09-07 14:09:03 +08:00
@cheng6563
@liangch 我也是这样的想的,直接来个脚本压缩,leader 比较想通过 log4j2 搞
SimpleSS
2021-09-07 14:10:16 +08:00
@v2orz
@SimpleSS 类似定制一个 log4j,但是我觉得对我有点困难
SimpleSS
2021-09-07 14:10:52 +08:00
@v2orz 就是这样的要求,但是对我可能有点困哪
sutra
2021-09-07 14:19:05 +08:00
SimpleSS
2021-09-07 14:27:18 +08:00
@sutra 嗯嗯,如果无法配置解决,就是拓展一下这个,这种情况的话我是需要修改这个 jar 包吗
sutra
2021-09-07 14:27:58 +08:00
不是修改,是在你的项目里增加一个类,然后配置一下就好了呀。
dongfangshangren
2021-09-07 14:36:29 +08:00
这个直接看官方文档,TimeBasedTriggeringPolicy 的一个属性 maxRandomDelay 就是你想要的, https://logging.apache.org/log4j/2.x/manual/appenders.html
SimpleSS
2021-09-07 14:36:56 +08:00
@sutra 就像是类似于拓展一个 appender 吗
SimpleSS
2021-09-07 14:38:34 +08:00
@dongfangshangren 我不太懂怎么去单独拓展某个策略然后再把他引用到配置文件,我看了自定义 appender 的话是在 Configuration 哪里配置自己的 appender 包名就可以了
dongfangshangren
2021-09-07 14:41:44 +08:00
@SimpleSS 不用扩展,log4j2 自带的功能,直接文档搜一下 maxRandomDelay 关键字 看一下他的文档有说明
sutra
2021-09-07 14:43:09 +08:00
我给你的链接里不是有一个定制 roller strategy 的例子么。
SimpleSS
2021-09-07 14:50:57 +08:00
@sutra 好的,好的,十分谢谢!
SimpleSS
2021-09-07 14:52:55 +08:00
@dongfangshangren 这个参数是对创建时间的延迟,好像是不可以的,比如 1 点应该生成 2.log 了延迟到 1 点 03 分才生成 2.log ,此时还是会把 1.log 直接压缩,然后才开始写入 2.log
salmon5
2021-09-07 23:25:48 +08:00
服务器上压缩日志,不是个明智之举,会耗费 CPU 影响业务;
如果日志太大,可以定义删除时间、优化日志内容或者扩容磁盘;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/800356

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX