gpt4 book ai didi

Java logging API MemoryHandler 即时转储日志

转载 作者:行者123 更新时间:2023-11-29 03:29:06 25 4
gpt4 key购买 nike

我想在特定阈值后记录我的应用程序的消息。 10 条消息后说。我阅读了内存处理程序并使用了它。但是我发现它会立即记录消息,而不是像文档中所说的那样缓冲它们。这是代码

Handler h = new FileHandler('/var/tmp/process.log',Level.INFO);
Handler h2 = new MemoryHandler(h, 10, Level.ALL);
logger.addHandler(h2);

for(int i=0; i<10; i++) {
logger.log(Level.INFO, "Sample message");
Thread.sleep(1000);
}

此代码会立即添加上面的消息。我错过了什么?我的目的是不让太多的磁盘 I/O 发生。请帮忙

最佳答案

中的第三个构造函数参数

Handler h2 = new MemoryHandler(h, 10, Level.ALL);

定义推送级别,即如果记录了给定级别或更高级别的消息,MemoryHandler 会将其推送到配置的下游处理程序 (jdk documentation)。

我认为 MemoryHandler 不适合您想要实现的目的。您可以创建自己的具有固定大小缓冲区的 MemoryHandler 实现,只要缓冲区已满就会刷新。但请考虑这种方法的缺点:当应用程序终止时,日志消息可能会丢失,刷新可能涉及阻塞 I/O,并且您无法确定哪个线程必须执行该 I/O。

或者,您可以考虑使用另一个经过验证的日志记录框架,例如 logback 或 log4j2。这些通常提供更高级的功能。我建议寻找异步日志记录。

关于Java logging API MemoryHandler 即时转储日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19325990/

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