V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SimpleSS
V2EX  ›  Java

log4j2 如何设置日志压缩延迟

  •  
  •   SimpleSS · 2021-09-07 12:01:30 +08:00 · 3030 次点击
    这是一个创建于 1177 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教大家一个 log4j2 的问题:

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

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

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

    21 条回复    2021-09-07 23:26:51 +08:00
    sutra
        1
    sutra  
       2021-09-07 13:47:21 +08:00
    日志采集脚本增加读取压缩文件是不是更简单?
    cheng6563
        2
    cheng6563  
       2021-09-07 13:51:13 +08:00   ❤️ 1
    log4j 不要压了,服务器另外写个 cron 去压。
    liangch
        3
    liangch  
       2021-09-07 13:57:30 +08:00
    cron+linux 随便一个啥命令压多方便
    Mohanson
        4
    Mohanson  
       2021-09-07 14:04:20 +08:00
    没有写本地日志的习惯了, 都是直接往 stdout 塞
    v2orz
        5
    v2orz  
       2021-09-07 14:06:11 +08:00
    自己写一个 appender 实现,啥都行
    SimpleSS
        6
    SimpleSS  
    OP
       2021-09-07 14:07:43 +08:00
    @sutra 日志收集的是个软件,问了运维说没法搞压缩
    SimpleSS
        7
    SimpleSS  
    OP
       2021-09-07 14:09:03 +08:00
    @cheng6563
    @liangch 我也是这样的想的,直接来个脚本压缩,leader 比较想通过 log4j2 搞
    SimpleSS
        8
    SimpleSS  
    OP
       2021-09-07 14:10:16 +08:00
    @v2orz
    @SimpleSS 类似定制一个 log4j,但是我觉得对我有点困难
    SimpleSS
        9
    SimpleSS  
    OP
       2021-09-07 14:10:52 +08:00
    @v2orz 就是这样的要求,但是对我可能有点困哪
    SimpleSS
        11
    SimpleSS  
    OP
       2021-09-07 14:27:18 +08:00
    @sutra 嗯嗯,如果无法配置解决,就是拓展一下这个,这种情况的话我是需要修改这个 jar 包吗
    sutra
        12
    sutra  
       2021-09-07 14:27:58 +08:00
    不是修改,是在你的项目里增加一个类,然后配置一下就好了呀。
    dongfangshangren
        13
    dongfangshangren  
       2021-09-07 14:36:29 +08:00
    这个直接看官方文档,TimeBasedTriggeringPolicy 的一个属性 maxRandomDelay 就是你想要的, https://logging.apache.org/log4j/2.x/manual/appenders.html
    SimpleSS
        14
    SimpleSS  
    OP
       2021-09-07 14:36:56 +08:00
    @sutra 就像是类似于拓展一个 appender 吗
    SimpleSS
        15
    SimpleSS  
    OP
       2021-09-07 14:38:34 +08:00
    @dongfangshangren 我不太懂怎么去单独拓展某个策略然后再把他引用到配置文件,我看了自定义 appender 的话是在 Configuration 哪里配置自己的 appender 包名就可以了
    dongfangshangren
        16
    dongfangshangren  
       2021-09-07 14:41:44 +08:00
    @SimpleSS 不用扩展,log4j2 自带的功能,直接文档搜一下 maxRandomDelay 关键字 看一下他的文档有说明
    sutra
        17
    sutra  
       2021-09-07 14:43:09 +08:00
    我给你的链接里不是有一个定制 roller strategy 的例子么。
    SimpleSS
        18
    SimpleSS  
    OP
       2021-09-07 14:50:57 +08:00
    @sutra 好的,好的,十分谢谢!
    SimpleSS
        19
    SimpleSS  
    OP
       2021-09-07 14:52:55 +08:00
    @dongfangshangren 这个参数是对创建时间的延迟,好像是不可以的,比如 1 点应该生成 2.log 了延迟到 1 点 03 分才生成 2.log ,此时还是会把 1.log 直接压缩,然后才开始写入 2.log
    salmon5
        20
    salmon5  
       2021-09-07 23:25:48 +08:00
    服务器上压缩日志,不是个明智之举,会耗费 CPU 影响业务;
    如果日志太大,可以定义删除时间、优化日志内容或者扩容磁盘;
    salmon5
        21
    salmon5  
       2021-09-07 23:26:51 +08:00
    你的解决思路稍微有点偏门
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1080 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:36 · PVG 03:36 · LAX 11:36 · JFK 14:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.