今天整合springboot2 + mybatis + logback 遇到了在日誌中sql打印不出來的坑,在網上找了很久,都不是我遇到的問題,這裏吐槽一下下如今的博客質量,好多都是抄襲的,也沒有標註轉載。
先說下要將sql打印到日誌的配置
一、在mybatis.xml配置中增長如下配置spring
<!--指定 MyBatis 增長到日誌名稱的前綴。--> <setting name="logPrefix" value="m-shop-mybatis-sql." /> <!--指定 MyBatis 所用日誌的具體實現,未指定時將自動查找。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING--> <setting name="logImpl" value="SLF4J" />
注:這裏注意下logPrefix的value須要帶「.」
二、在logback-spring中增長以下配置sql
<logger name="m-shop-mybatis-sql" level="debug"></logger>
注:這裏的name屬性須要與mybatis文件中logPrefix的值對應,但這裏不帶「.」springboot
那麼這裏說我遇到的問題吧,如下是個人logback中部分配置mybatis
<!--將日誌輸出到控制檯--> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--打印格式--> <pattern>${LOG_FORMAT}</pattern> <!-- 設置字符集 --> <charset>${ENCODING}</charset> </encoder> </appender> <logger name="m-shop-mybatis-sql" level="debug"></logger> <springProfile name="dev,test"> <!-- 日誌輸出級別 --> <root level="info"> <appender-ref ref="CONSOLE" /> </root> </springProfile> <springProfile name="prod"> <!-- 日誌輸出級別 --> <root level="info"> <appender-ref ref="FILE" /> </root> </springProfile>
這是我最開始的配置,就是打印不出sql來,最後找到問題,是由於級別的緣由。
解決方法
app
將這裏的info改成debug,就能夠打印出來了。debug
解釋下緣由:
我使用的是dev,日誌打印級別爲info,設置logger爲mybatis的打印級別爲debug,雖然info級別大於debug,可是有logger 在應該是能夠打印出來的,可是我在CONSOLE的中也配置了級別爲info,這裏的設置會攔截logger設置的級別。日誌
最後在說下sql打印在控制檯的區別:code
以上第一張圖是mybatis本身設置打印在控制檯的,第二張圖是mybatis打印在logback日誌中,logback打印在控制檯的。xml