gpt4 book ai didi

java - 干净地强制 Log4j RollingFileAppender 在午夜后不久滚动?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:27:55 25 4
gpt4 key购买 nike

Log4j RollingFileAppender 的正常行为是在不同日期出现第一条日志消息时滚动,但有些人对每个日期的空日志文件感到温暖和模糊,即使什么也没发生。有没有办法强制它在午夜后滚动而不向日志写入虚拟消息?

最佳答案

我非常仔细地查看了这段代码 - 简单的答案是“否”。翻转作为 Appender 上 doAppend() 流的一部分被触发——触发它的唯一方法是记录一些东西。

你可以用 cron 来伪造这个:只需要一个 cron 脚本来处理明天 11:58 的文件。这将为您提供您正在寻找的空日志文件行为。

实现翻转功能的代码如下:

void rollOver() throws IOException {

/* Compute filename, but only if datePattern is specified */
if (datePattern == null) {
errorHandler.error("Missing DatePattern option in rollOver().");
return;
}

String datedFilename = fileName+sdf.format(now);
// It is too early to roll over because we are still within the
// bounds of the current interval. Rollover will occur once the
// next interval is reached.
if (scheduledFilename.equals(datedFilename)) {
return;
}

// close current file, and rename it to datedFilename
this.closeFile();

File target = new File(scheduledFilename);
if (target.exists()) {
target.delete();
}

File file = new File(fileName);
boolean result = file.renameTo(target);
if(result) {
LogLog.debug(fileName +" -> "+ scheduledFilename);
} else {
LogLog.error("Failed to rename ["+fileName+"] to ["+scheduledFilename+"].");
}

try {
// This will also close the file. This is OK since multiple
// close operations are safe.
this.setFile(fileName, false, this.bufferedIO, this.bufferSize);
}
catch(IOException e) {
errorHandler.error("setFile("+fileName+", false) call failed.");
}
scheduledFilename = datedFilename;
}

关于java - 干净地强制 Log4j RollingFileAppender 在午夜后不久滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4082899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com