Java 即使日志级别不为';我不允许他们
如果我有一个java util日志语句,比如Java 即使日志级别不为';我不允许他们,java,logging,Java,Logging,如果我有一个java util日志语句,比如 logger.log(LEVEL.FINE, "data buffer = {0}", CommonUtils.prepareDataBufferString(dataBuffer)); 现在,即使我的日志级别不是很好,昂贵的准备。。方法仍然被调用, 这不是我想要的。最后,我在执行此语句之前检查记录器级别 if(logger.isLoggable(LEVEL.FINE)){ bufferString = CommonUtils.prepar
logger.log(LEVEL.FINE, "data buffer = {0}",
CommonUtils.prepareDataBufferString(dataBuffer));
现在,即使我的日志级别不是很好,昂贵的准备。。方法仍然被调用,
这不是我想要的。最后,我在执行此语句之前检查记录器级别
if(logger.isLoggable(LEVEL.FINE)){
bufferString = CommonUtils.prepareDataBufferString(dataBuffer);
}
logger.log(LEVEL.FINE, "data buffer = {0}", bufferString);
这不必要地增加了代码行数。我可以不必这样做吗。请帮忙 不,我所知道的任何Java日志API都无法避免它。语言中只有两种方法可以实现您的目标:
我知道没有实现(2)的日志API,而且我不确定您是否会发现传入匿名对象不会太冗长。类似的技术可能会有所帮助
logger.log(LEVEL.FINE, "data buffer = {0}",
new Object() {
@Override public String toString() {
return CommonUtils.prepareDataBufferString(dataBuffer));
}
});
仅供参考,调用该方法的不是日志框架,而是Java。Java要求在调用方法之前对方法的所有参数进行求值(这称为急切求值,与惰性求值不同)。使用参数化形式的
log
?(例如Logger.log(level,message,param)FYI如果您使用if
语句,为什么不在下面的块中直接调用记录器,而不是在条件为false的情况下必须初始化的范围更广的额外变量?