log4j动态生成日志文件

log4j动态生成日志文件

log4j在第一次加载的时候会生成需要记录的日志文件,这个生成的日志文件如果不小心删除了,那么log4j将不会再重新创建一个新的文件,导致日志数据信息流失。这时就需要解决在日志文件删除的情况下,如何动态的自动生成日志文件呢。
查看源码,我们会发现log4j在记录日志的时候会有一个记录策略。

public boolean isTriggeringEvent(LogEvent event) {
        boolean triggered = this.manager.getFileSize() > this.maxFileSize;
        if (triggered) {
            this.manager.getPatternProcessor().updateTime();
        }

        return triggered;
    }

即在准备将数据写入日志的时候会调用这个方法。因此我们在这里加入判断是否文件存在的方法即可,如果文件不存在就创建一个新的文件,这里调用它的rollover方法重新创建文件。

public synchronized void rollover() {
        if (this.hasOutputStream()) {
            if (this.rollover(this.rolloverStrategy)) {
                try {
                    this.size = 0L;
                    this.initialTime = System.currentTimeMillis();
                    this.createFileAfterRollover();
                } catch (IOException var2) {
                    this.logError("Failed to create file after rollover", var2);
                }
            }

        }
    }

因此将isTriggeringEvent进行修改方案如下:

public boolean isTriggeringEvent(LogEvent event)
  {
    File file = new File(this.manager.getFileName());
    if (!file.exists()) {
      this.manager.rollover();
    }
    
    boolean triggered = this.manager.getFileSize() > this.maxFileSize;
    if (triggered) {
      this.manager.getPatternProcessor().updateTime();
    }
    return triggered;
  }

这里使用的是直接在源码里面修改,所以需要先下载log4j-core的源码包,修改后编译替换log4j-core.jar里面的class文件。重新发布到项目。经过鄙人测试,在删除了日志文件后,当有新的日志生成时会动态生成新的日志文件。
修改前:
在这里插入图片描述
删除所有日志:
在这里插入图片描述
通过相关操作重新触发日志生成:
在这里插入图片描述
log4j动态生成日志jar包:
log4j-core-2.12.0.jar

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值