【发布时间】:2020-04-04 15:51:00
【问题描述】:
我有一个这样的method:
private String getOrderListAsString() {
StringBuilder str = new StringBuilder();
str.append("Sell list:");
for (Order o : sellOrderList) {
str.append("\nSale: ").append(o);
}
str.append("Buy list:");
for (Order o : buyOrderList) {
str.append("\nBuy: ").append(o);
}
return str.toString();
}
使用日志参数化调用它,如下所示: 我们使用java.util.logging 作为记录器。
logger.log(Level.INFO, "{0}", getOrderListAsString());
问题是即使记录器级别为Level.OFF,字符串连接仍在进行中。
为了解决这个问题,我们在方法的开头添加了 if 语句:
// Declaration:
boolean shouldLog = DebugWriter.getInstance().getLogger().getLevel() != Level.OFF;
// Usage in function:
if(!shouldLog) return null;
但感觉这可以用更聪明的方式完成。提前致谢!
【问题讨论】:
-
整个项目都在我的掌控之中。理论上我可以改变任何东西
-
按照您编写代码的方式,方法
getOrderListAsString()将总是被调用,无论日志级别如何。您需要在生成日志消息之前检查日志级别。
标签: java performance string-concatenation