请教大家一个 log4j2 的问题:
背景:在项目中目前使用 log4j2 采用 DirectWriteRolloverStrategy 方式每隔一个小时生成一个日志文件 1.log ,一个小时后生成一个新的日志文件 2.log ,同时将老的日志文件 1.log 压缩成 1.log.gz 。
问题:但是日志收集软件有概率没有读取完 1.log 或者崩溃重启,之后再读之前的那个旧的时 2.log 已经生成了,1.log 变成了压缩文件无法再读取了。有没有希望通过配置来设置压缩时间延后几个小时,生成 2.log 时不要马上将 1.log 压缩,或者保留几个未压缩过一段时间再一起压缩?
可以通过单写脚本的方式来压缩,但是 leader 更希望用 log4j2 的配置来搞这个问题,各位有好的什么办法吗。
1
sutra 2021-09-07 13:47:21 +08:00
日志采集脚本增加读取压缩文件是不是更简单?
|
2
cheng6563 2021-09-07 13:51:13 +08:00 1
log4j 不要压了,服务器另外写个 cron 去压。
|
3
liangch 2021-09-07 13:57:30 +08:00
cron+linux 随便一个啥命令压多方便
|
4
Mohanson 2021-09-07 14:04:20 +08:00
没有写本地日志的习惯了, 都是直接往 stdout 塞
|
5
v2orz 2021-09-07 14:06:11 +08:00
自己写一个 appender 实现,啥都行
|
7
SimpleSS OP |
10
sutra 2021-09-07 14:19:05 +08:00
|
12
sutra 2021-09-07 14:27:58 +08:00
不是修改,是在你的项目里增加一个类,然后配置一下就好了呀。
|
13
dongfangshangren 2021-09-07 14:36:29 +08:00
这个直接看官方文档,TimeBasedTriggeringPolicy 的一个属性 maxRandomDelay 就是你想要的, https://logging.apache.org/log4j/2.x/manual/appenders.html
|
15
SimpleSS OP @dongfangshangren 我不太懂怎么去单独拓展某个策略然后再把他引用到配置文件,我看了自定义 appender 的话是在 Configuration 哪里配置自己的 appender 包名就可以了
|
16
dongfangshangren 2021-09-07 14:41:44 +08:00
@SimpleSS 不用扩展,log4j2 自带的功能,直接文档搜一下 maxRandomDelay 关键字 看一下他的文档有说明
|
17
sutra 2021-09-07 14:43:09 +08:00
我给你的链接里不是有一个定制 roller strategy 的例子么。
|
19
SimpleSS OP @dongfangshangren 这个参数是对创建时间的延迟,好像是不可以的,比如 1 点应该生成 2.log 了延迟到 1 点 03 分才生成 2.log ,此时还是会把 1.log 直接压缩,然后才开始写入 2.log
|
20
salmon5 2021-09-07 23:25:48 +08:00
服务器上压缩日志,不是个明智之举,会耗费 CPU 影响业务;
如果日志太大,可以定义删除时间、优化日志内容或者扩容磁盘; |
21
salmon5 2021-09-07 23:26:51 +08:00
你的解决思路稍微有点偏门
|