前言
現在很多項目中都是直接用的@Slf4j
的註解來打印日誌,然後又想看mybatis的日誌,自己之前也各種網上找方法,配置的東西很多然而又不一定有效。
這個算是已經在自己項目試了有效了的。這裏說的只適用於項目使用slf4j日誌, mybatis和mybatis-plus, slf4j 和slf4j2, apache的log不一樣都可能不生效
依賴
slf4j的依賴:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
配置
slf4j配置
下面的配置關鍵有兩點.
- 保證debug日誌能輸出,這個可以自己打印試試
log4j.logger.org.mybatis=debug
# 關鍵
log4j.logger.org.mybatis=debug
# 下面的配置按自己需求而定, 不過要確保debug級別的日誌能輸出到debug文件
log4j.rootLogger=DEBUG,console,D
############### 控制檯 ###################
log4j.appender.logfile.encoding=UTF-8
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=${property.pattern}
############### DEBUG級別 ###################
# 日誌輸入到debug
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.append=true
log4j.appender.D.file=../logs/oa-exchange/debug/debug.log
log4j.appender.D.DatePattern='-'yyyyMMdd'.log'
.....剩下的日誌配置
mybatis配置
這個在mybatis配置文件中加上
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
效果
如果slf4j日誌配置中, 沒有 log4j.logger.org.mybatis=debug
, 就可能只有黃色框框的信息, 沒有紅色信息 (可以幫助我們知道是否開啓了事務, 個人覺得很重要)
其他幾種配置
mybatis的配置中, 針對項目使用不同的日誌, 有不同的配置
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING| STDOUT_LOGGING | NO_LOGGING
比如
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" /> ====》System.out.pringln.
</settings>
</configuration>
這也是網上常見的一種, 這種方式不太好的地方, 就是它還是作爲控制檯輸出的System.out.pringln
, 無法使用我們的日誌配置格式, 也沒有刷到日誌文件中.
而且如果項目使用的是slf4j, 使用LOG4J | LOG4J2
啓動項目都會報錯
附
Mybatis 的內置日誌工廠提供日誌功能,內置日誌工廠將日誌交給以下其中一種工具作代理:
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
MyBatis 內置日誌工廠基於運行時自省機制選擇合適的日誌工具。它會使用第一個查找得到的工具(按上文列舉的順序查找
)。如果一個都未找到,日誌功能就會被禁用。
未指定時自動查找???什麼意思呢???
只要你的springmvc 工程中配置了log4j.properties ,
<setting name="logImpl" value="LOG4J" />
=== >可寫可不寫, 這個自己試了下, 註釋了確實仍然生效。
就會按照上文列舉的順序查找到對應的配置日誌框架Log4。