代码中常见debug日志输出形式
if (log.isDebugEnabled()) {
log.debug("hello" + "log");
}
外一种
log.debug("{}", "hello" + "log");
那么这两种debug输出方式有区别吗?网上有些资料显示说这两种方式等价,后一种属于前一种的简化方式,下面通过代码验证一番
将logback日志级别设置为error
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="30 seconds" packagingData="true">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="error">
<appender-ref ref="CONSOLE"></appender-ref>
</root>
</configuration>
在日志级别为error下,按两种方式debug日志各100w次,统计消耗时间
@Test
public void debugTest() {
Stopwatch stopwatch = Stopwatch.createStarted();
for (int i=0 ;i< 10;i++) {
isDebug();
}
System.out.println(stopwatch.elapsed(TimeUnit.MILLISECONDS));
Stopwatch stopwatch2 = Stopwatch.createStarted();
for (int i=0 ;i< 10;i++) {
debugPlaceholder();
}
System.out.println(stopwatch2.elapsed(TimeUnit.MILLISECONDS));
}
private static void isDebug() {
if (log.isDebugEnabled()) {
log.debug(acquireMsg());
}
}
private static void debugPlaceholder() {
log.debug("{}", acquireMsg());
}
private static String acquireMsg() {
String str = "hello";
try {
//假设执行运算表达式逻辑
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return str;
}
第二种debug(debug({},"xxxx"))方式耗时明显大于第一种,说明第二中方式执行了参数计算逻辑,通过断点的方式也可以证明。在if中可以通过占位符方式输出日志。