java Logger中的日志计数器

时间:2013-08-27 15:54:49

标签: java logging

我正在使用java.util.logging.Logger在不同级别记录各种消息(例如,通过方法.fine().finer().info().warning())。我想知道每个级别上记录了多少条消息。是否有可能没有写我自己的类,如:

public class MyLogger extends Logger
{
   int infoCounter = 0;

   @Override
   public void info(String msg)
   {
      super.info(msg);
      infoCounter++; 
   }
}

1 个答案:

答案 0 :(得分:4)

答案是不,这是不可能的 你现在这样做的方式很好(当然,一旦它同步)。

还有一种方法:不是扩展Logger,而是扩展java.util.logging.Handler,然后:

  1. 覆盖publish()方法
  2. 实施flush()和close()
  3. 创建按级别计算邮件的方法

    我尝试了这个并测试了它,并且它起作用了:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.logging.Handler;    
    import java.util.logging.Level;
    import java.util.logging.LogRecord;
    
    public class CountHandler extends Handler {
    
    List<LogRecord> records = new ArrayList<LogRecord>();
    
        @Override
        public void publish(LogRecord record) {
            records.add(record);
        }
    
        public int howMany(Level level) {
            int howMany = 0;
            for(LogRecord record : records) {
                if (record.getLevel().intValue() == level.intValue()) {
                    howMany++;
                }
            }
            return howMany;
        }
    
        @Override
        public void flush() {
    
        }
    
        @Override
        public void close() throws SecurityException {
    
        }
    
    }
    
  4. 这样做的好处是您不必为每个级别覆盖方法。唯一的事情是你必须将这个处理程序添加到每个记录器中:

    CountHandler messageCounter= new CountHandler();
            logger.addHandler(messageCounter);
    

    所以要把它当作它的价值。无论你做什么,你都必须自己编写课程。