如果我有一个java util日志语句,如
logger.log(LEVEL.FINE, "data buffer = {0}",
CommonUtils.prepareDataBufferString(dataBuffer));
现在即使我的日志级别不是FINE,仍然会调用昂贵的prepare ..方法, 这不是我想要发生的事情。我最终在此声明之前检查了记录器级别
if(logger.isLoggable(LEVEL.FINE)){
bufferString = CommonUtils.prepareDataBufferString(dataBuffer);
}
logger.log(LEVEL.FINE, "data buffer = {0}", bufferString);
这会不必要地增加代码行数。我可以避免以某种方式这样做。请帮忙。
答案 0 :(得分:4)
这样的技术可能有所帮助。
logger.log(LEVEL.FINE, "data buffer = {0}",
new Object() {
@Override public String toString() {
return CommonUtils.prepareDataBufferString(dataBuffer));
}
});
仅供参考,它不是调用方法的日志框架,而是Java。 Java要求在调用方法之前评估方法的所有参数(这称为急切评估,与惰性评估形成对比)。
答案 1 :(得分:2)
不,你不能用我知道的任何Java日志API来避免它。语言中只有两种方法可以满足您的需求:
我知道没有记录API实现(2),而且我不确定你发现传递一个匿名对象的冗长程度。