Java Logger - Netbeans暗示"在记录器中低效使用字符串连接"

use*_*252 6 java netbeans string-formatting

我从java开始,我尝试记录一些东西.

private static final Logger _logger = Logger.getLogger("my"); 

String car = "bmw";
String dog = "dog"; 

_logger.info(car + " text " + dog); // on this line Netbeans
Run Code Online (Sandbox Code Playgroud)

..在这一行上,Netbeans向我展示了黄色灯泡并说:在记录器中使用字符串连接效率低下

所以我点击"将字符串连接转换为消息模板",它将代码更改为:

_logger.log(Level.INFO, "[{0}] v{1} enabled", new Object[]{car, dog});
Run Code Online (Sandbox Code Playgroud)

那会引起问题.因为在日志中我看到:[{0}] v{1} enabled 如何修复它?

Rya*_*mos 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)忽略警告,因为效率与此无关.如果你真的关心速度,你就不会记录东西.记录需要很长时间,字符串格式和字符串附加之间的差异相对于写日志所花费的时间而言非常小.

  • 有理由使用参数而不是连接是为了避免在日志级别高于INFO时创建字符串.您的所有建议都会每次创建字符串. (4认同)