gpt4 book ai didi

java - 避免丢弃 MemoryHandler 中的旧条目

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:10 26 4
gpt4 key购买 nike

当记录到 MemoryHandler 时,当 numofentries > size 时,MemoryHandler 会删除旧条目。

我想避免这种行为,或者至少在日志中标记旧条目被抑制。

小测试用例:

import java.util.logging.*;
public class SSCE01 {
public static void main (String [] args) {

Logger rootLogger = Logger.getLogger("");
rootLogger.removeHandler(rootLogger.getHandlers()[0]); //remove default Console Handler

ConsoleHandler ch = new ConsoleHandler();
Logger l = Logger.getLogger("test");
MemoryHandler mh = new MemoryHandler(ch,3,Level.OFF);
l.addHandler(mh);

l.severe("this shouldnt be logged");
l.severe("this shouldnt be logged");
l.severe("this shouldnt be logged");
l.severe("this should be logged");
l.severe("this should be logged");
l.severe("this should be logged");

mh.push();

}
}

最佳答案

这是一个坏主意,你会用痕迹填满内存机器。尽管如此,MemoryHandle 是一个循环缓冲区,因此当它被填满时,其他条目将被删除。如果您希望不删除条目,只需使用 Integer.MAX_VALUE 作为大小来构造它 - 这又是一个坏主意。这会影响你的应用程序性能,人们往往会避免这种情况。

考虑使用将跟踪转储到辅助存储中的处理程序,添加时间戳;并使用那里的跟踪构建您需要的任何逻辑。

编辑

根据您报告的代码,您可以将日志记录功能封装在另一个类中,该类记录 MemoryHandler 中的条目数。类似于:

class MyMemoryConsoleHandler {
private Logger rootLogger;
private MemoryHandler mh;
private Logger l;
private int size = 3;
private int entries = 0;
public MyMemoryConsoleHandler() {
this.rootLogger = Logger.getLogger("");
this.rootLogger.removeHandler(rootLogger.getHandlers()[0]);
ConsoleHandler ch = new ConsoleHandler();
this.l = Logger.getLogger("test");
this.mh = new MemoryHandler(ch,this.size,Level.OFF);
}

public synchronized void push() {
this.mh.push();
if (this.entries > this.size) {
this.l.severe("Entries in log discarded !!!");
this.mh.push();
}
this.entries = 0;
}

public synchronized void addMessage(String m) {
this.entries++;
this.l.severe(m);
}
}

不要使用 Java API 的日志记录调用,而是直接使用 MyMemoryConsoleHandler,以便您可以控制推送到控制台的内容。

注意同步方法,如果您有多线程应用程序,则需要这样做。否则你可能会遇到竞争条件。

关于java - 避免丢弃 MemoryHandler 中的旧条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094855/

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