gpt4 book ai didi

java - java Logger中的日志计数器

转载 作者:搜寻专家 更新时间:2023-11-01 02:47:41 24 4
gpt4 key购买 nike

我正在使用 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++;
}
}

最佳答案

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

有一个替代方案:不扩展 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 {

    }

    }

这样做的好处是您不必为每个关卡重写方法。唯一的问题是您必须将此处理程序添加到您的每个记录器:

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

因此,请物有所值。无论您做什么,都必须编写自己的类(class)。

关于java - java Logger中的日志计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470284/

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