我从java开始,我尝试登录。
private static final Logger _logger = Logger.getLogger("my");
String car = "bmw";
String dog = "dog";
_logger.info(car + " text " + dog); // on this line Netbeans
..在这一行上,Netbeans向我展示了黄色灯泡并说:在记录器中低效使用字符串连接
所以我点击“将字符串连接转换为消息模板”,然后将代码更改为:
_logger.log(Level.INFO, "[{0}] v{1} enabled", new Object[]{car, dog});
那导致问题。因为在日志中我看到:[{0}] v{1} enabled
如何解决?
答案 0 :(得分:9)
您有几个选择
1)使用String.format()_logger.log(Level.INFO, String.format("[%s] %s enabled", car, dog))
。
2)使用StringBuilder.append()
或String.concat()`。
例如:_logger.log(Level.INFO, new StrinBuilder(car).append(" text ").append(dog));
这基本上就是javac在优化中的作用。
3)忽略警告,因为效率与此无关。如果你真的关心速度,你就不会记录东西。记录需要很长时间,字符串格式和字符串附加之间的差异相对于写日志所花费的时间而言非常小。
答案 1 :(得分:1)
它只是帮助Netbeans提供建议,实际上是代码
_logger.info(car + " text " + dog); // on this line Netbeans
_logger.log(Level.INFO, "{0} text {1}", new Object[]{car, dog});
生成相同的输出。第一个变种更多编码器友好的键入调试消息的时间更少,第二个很棒。
答案 2 :(得分:1)
在确定是否应该写入消息之前生成取消参数化字符串的任何方法都是低效的。
你可能写得不好java.util.logging.Formatter
。我的意思是格式化程序只输出LogRecord.getMessage()
而不是合并LogRecord.getParameters()
答案 3 :(得分:0)
这是实际格式化netbeans 7.1.2做
public class Vels4j {
private static final Logger _logger = Logger.getLogger("my");
String car = "bmw";
String dog = "dog";
Vels4j() {
// _logger.info(car + " text " + dog);
_logger.log(Level.INFO, "{0} text {1}", new Object[]{car, dog});
}
public static void main(String[] args) {
Vels4j vels4j = new Vels4j();
}
}
如果您不想要,可以禁用提示。也可以配置提示。