在調用log
變量的方法來輸出日志時,有以上5個級別對應的方法,從不太重要,到非常重要
調用不同的方法,就會輸出不同級別的日志。
trace
:跟蹤信息debug
:調試信息info
:一般信息warn
:警告信息error
:錯誤信息
問題:SpringBoot只打印了info等級的日志?
原因:使用了Spring Boot(例如在測試類上添加了@SpringBootTest
注解),日志的默認顯示級別是info
,則只會顯示info
、warn
、error
級別的日志,不會顯示trace
、debug
級別的日志。
解決方法
1.首先我們確認使用了工具打印日志
在pom.xml中添加依賴
<!-- Lombok的依賴項,主要用于簡化POJO類的編寫 --><!-- 添加了Lombok后,在任何類的聲明之前,添加@Slf4j注解,則編譯期會自動聲明一個名為log的變量,所以,可以在類中通過此變量來輸出日志。 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope></dependency>
使用前,在任何類的聲明之前,添加@Slf4j注解,如下則編譯期會自動聲明一個名為log的變量
@Slf4j
@SpringBootTest
class SmallApplicationTests {@Testvoid logTest(){int x = 1;int y = 2;System.out.println("x = " + x + ", y = " + y + ", x + y = " + (x + y)); // 傳統做法log.trace("111x = {}, y = {}, x + y = {}", x , y , x + y); // 使用日志輸出變量的做法log.debug("222x = {}, y = {}, x + y = {}", x , y , x + y); // 使用日志輸出變量的做法log.info("333x = {}, y = {}, x + y = {}", x , y , x + y); // 使用日志輸出變量的做法log.warn("444x = {}, y = {}, x + y = {}", x , y , x + y); // 使用日志輸出變量的做法log.error("555x = {}, y = {}, x + y = {}", x , y , x + y); // 使用日志輸出變量的做法}
}
2.配置展示日志等級
在Spring Boot項目中,可以在配置文件(application.properties
/ application.yml
/ 相關Profile配置)中配置logging.level.包名
屬性,以指定某個包下的所有類的默認日志顯示級別,此屬性的值為5個級別中的某1個。
例如,在application.yml
添加配置:
#加載Spring Boot的情況下,日志的默認顯示級別是info,只會顯示此級別及更加重要的級別的日志info.warn,error
#為了所有日志都現在,包括trace(跟蹤日志),debug (調試日志)
#實際嘗試有效
logging:level:com.luoyang.small: trace
或者在application.properties
中添加配置
#實際嘗試有效
logging.level.com.luoyang.small=TRACE
結果:
附加信息
提示: Mybatis框架會生成各Mapper接口的對象,這些對象在執行SQL語句時,也會輸出日志。如果想看的trace
和info
級別的日志,也需要把日志的顯示級別設置為較低的trace
級別
日志占位符: 在調用日志的方法時,如果輸出的信息中包含變量值,可以使用{}
作為占位符,表示此處是一個變量值,然后,通過Object... args
依次傳入各占位符對應的值,如下:
@Testvoid logTest(){int x = 1;int y = 2;System.out.println("x = " + x + ", y = " + y + ", x + y = " + (x + y)); // 傳統做法log.trace("111x = {}, y = {}, x + y = {}", x , y , x + y); // 使用日志輸出變量的做法}
以上使用日志輸出時,不會涉及到字符串的拼接,所以,執行效率會更高。并且,以上方法的第1個參數是字符串常量,是在內存中的字符串常量池中的,也可以一定程度上提高執行效率。
創造價值,樂哉分享!