gpt4 book ai didi

java - 如何减少Java中的日志记录频率?

转载 作者:行者123 更新时间:2023-12-02 04:17:21 25 4
gpt4 key购买 nike

我在java环境中使用java日志记录(默认提供的)。

我想问如何汇总我的读数和日志,比如说每秒一次而不是更频繁(我似乎每秒记录 20 次)。怎么才能做到这一点?

是否可以使用任何设置来减少将数据推送到文件的频率?我以前从未登录过,所以我不确定是否可能。谢谢。

编辑:我正在记录响应时间、吞吐量和类似的东西。由于我的程序很重,我希望 jul 能够少缓冲和记录日志。

最佳答案

使用 JUL 自定义日志记录你可以自己写Handler执行。如果你想记录到一个文件,你应该扩展 FileHandler 。使用 ConsoleHandler 的实现可能看起来像这样:

package my.logging;

import java.util.Queue;
import java.util.concurrent.*;
import java.util.logging.ConsoleHandler;
import java.util.logging.LogRecord;

public class BufferingHandler extends ConsoleHandler implements AutoCloseable {

private final Queue<LogRecord> logRecordsFifo = new ConcurrentLinkedQueue<>();
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

public BufferingHandler(final int delay, final TimeUnit timeUnit) {
super();
scheduler.scheduleWithFixedDelay(() -> handleLogs(), delay, delay, timeUnit);
}

private void handleLogs() {
while (!logRecordsFifo.isEmpty()) {
// sync is required to preserve logs order when flushing
synchronized (logRecordsFifo) {
final LogRecord log = logRecordsFifo.poll();
if (log != null) super.publish(log);
}
}
}

@Override
public void publish(final LogRecord record) {
if (!isLoggable(record)) return;
logRecordsFifo.add(record);
}

@Override
public void flush() {
handleLogs();
super.flush();
}

@Override
public void close() {
scheduler.shutdown();
flush();
super.close();
}
}

此处理程序的用法可能如下所示:

import my.logging.BufferingHandler;

import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;

public class App {

public static void main(String[] args) throws InterruptedException {
final Logger logger = Logger.getLogger(App.class.getName());
try (final BufferingHandler bufferingHandler = new BufferingHandler(1, TimeUnit.SECONDS)) {
logger.addHandler(bufferingHandler);
for (int i = 0; i < 30; ++i) {
Thread.sleep(200);
logger.info("some info: " + i);
}
}
}

}

关于java - 如何减少Java中的日志记录频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33176215/

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