微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

避免丢弃MemoryHandler中的旧条目

如何解决避免丢弃MemoryHandler中的旧条目

| 登录到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();

    }
}
    

解决方法

这是一个坏主意,您会在存储机中填充痕迹。尽管如此,“ 1”是一个循环缓冲区,所以当它充满时,其他条目将被删除。如果您不希望删除条目,只需将其大小设置为construct2-即可-同样,这不是一个好主意。这将与您的应用程序性能发生冲突,人们倾向于避免这种情况。 考虑使用将跟踪信息转储到辅助存储中的处理程序,并添加时间戳;并使用从那里开始的迹线构建所需的任何逻辑。 编辑 从报告的代码中,您可以将日志记录功能封装在另一个类中,该类记录“ 3”中的条目数。就像是:
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的日志记录调用,而是直接使用“ 5”键,这样您就可以控制推送到控制台的内容。 注意
synchronized
方法,如果您有多线程应用程序,则需要此方法。否则,您可能会遇到比赛条件。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。