使用log4j String或StringBuilder打印日志的效率更高

sij*_*sij 2 java string stringbuilder log4j

伙计我在我的小java实用程序中打印了很多日志,所以只想到这个问题,如果它是一个非常大的系统和效率很重要,并且如果我们生成了很多日志(使用log4j)这是更好的对象来保存记录消息String或StringBuilder.

Mis*_*ble 5

如果你选择的话

logger.Debug(string1 + string2);
Run Code Online (Sandbox Code Playgroud)

logger.Debug(new StringBuilder(string1).append(string2).toString());
Run Code Online (Sandbox Code Playgroud)

然后没有区别

但是如果有很多检查和构造,logString += <something>那么使用a StringBuilder更好.

请注意,log4j的最大效率问题来自于在不检查日志级别的情况下计算表达式.你总是需要

if (logger.isDebug())
    logger.Debug(..));
Run Code Online (Sandbox Code Playgroud)

许多CPU周期被浪费了串联字符串并评估其结果将很快被丢弃的其他表达式,因为logger设置为更高级别.