gpt4 book ai didi

java - 我如何根据时间或大小将 logback 配置为翻转,文件总数的绝对最大值?

转载 作者:搜寻专家 更新时间:2023-10-31 20:20:26 26 4
gpt4 key购买 nike

如果这被视为重复,我们深表歉意。 This question非常相似但不相同。我对控制文件总数很感兴趣(我真的想控制所有日志的总大小)。

我想从日志中返回以下内容:

  • 对于当前文件,每 12 小时滚动一次或文件达到 100MB。
  • 无论如何,总空间不要超过 600MB(我也可以这样说:备份文件不要超过 5 个)。

第一点似乎很简单。我知道 TimeBasedRollingPolicy,我知道我可以限制每个文件的大小,但这还不够。我需要一种方法来限制日志文件的总数,而不仅仅是时间段的总数。

最佳答案

已经很长时间了,有人要代码,所以我想我会把它作为答案发布。我没有测试过它,但它应该作为一个合理的例子。

/**
* Extends SizeBasedTriggeringPolicy to trigger based on size or time in minutes
*
* Example:
* <triggeringPolicy class="com.foo.bar.TimeSizeBasedTriggeringPolicy">
* <MaxFileSize>10MB</MaxFileSize>
* <RolloverInMinutes>35</RolloverInMinutes>
* </triggeringPolicy>
*
* This would rollover every 35min or 10MB, whichever comes first. Because isTriggeringEvent()
* is only called when a log line comes in, these limits will not be obeyed perfectly.
*/
public class TimeSizeBasedTriggeringPolicy<E> extends SizeBasedTriggeringPolicy<E> {
private long MILLIS_IN_A_MINUTE = 60 * 1000;

private long rolloverPeriod;
private long nextRolloverTime;

@Override
public void start() {
nextRolloverTime = System.currentTimeMillis() + rolloverPeriod;
super.start();
}

@Override
public boolean isTriggeringEvent(File activeFile, final E event) {
long currentTime = System.currentTimeMillis();
boolean isRolloverTime = super.isTriggeringEvent(activeFile, event) ||
currentTime >= nextRolloverTime;

// Reset the rollover period regardless of why we're rolling over.
if (isRolloverTime) {
nextRolloverTime = currentTime + rolloverPeriod;
}

return isRolloverTime;
}

public long getRolloverInMinutes() {
return rolloverPeriod / MILLIS_IN_A_MINUTE;
}

public void setRolloverInMinutes(long rolloverPeriodInMinutes) {
this.rolloverPeriod = rolloverPeriodInMinutes * MILLIS_IN_A_MINUTE;
}
}

关于java - 我如何根据时间或大小将 logback 配置为翻转,文件总数的绝对最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332198/

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