我正在使用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++;
}
}
答案 0 :(得分:4)
答案是不,这是不可能的
你现在这样做的方式很好(当然,一旦它同步)。
还有一种方法:不是扩展Logger,而是扩展java.util.logging.Handler,然后:
创建按级别计算邮件的方法
我尝试了这个并测试了它,并且它起作用了:
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);
所以要把它当作它的价值。无论你做什么,你都必须自己编写课程。