mybatis打印日志 如何控制Mybatis的SQL日志输出

vbhYIYTMK89042024-04-17 19:48:32

一、如何关闭mybatis日志

使用环境:Mybatis_3.2.8+ Log4j2_2.1

首先要说明的是:

Mybatis是用Mapper类的全路径名,作为logger的名称的。

Mybatis中,打印SQL语句的日志级别是DEBUG,而打印SQL执行结果集的日志级别是TRACE。

比如,我们的应用是: com.test.app

而mapper类所在的路径为: com.test.app.dao

则我们可以分别控制应用的业务日志和SQL日志的输出。

如下的Log4j2.xml将输出所有业务日志,以及SQL语句日志

引用

1

2

3

4

5

6

7

8

9

10

<Loggers>

<Logger name="com.test.app.dao" additivity="false" level="<a href="" target="_blank" class="baidu-highlight">DEBUG</a>">

<AppenderRef ref="sql_log"/>

<AppenderRef ref="Console"/>

</Logger>

<Logger name="com.test.app" additivity="false" level="<a href="" target="_blank" class="baidu-highlight">TRACE</a>">

<AppenderRef ref="biz_<a href="" target="_blank" class="baidu-highlight">debug</a>"/>

<AppenderRef ref="Console"/>

</Logger>

</Loggers>

如下的Log4j2.xml将输出所有业务日志,以及SQL语句日志,SQL语句执行结果日志

引用

1

2

3

4

5

6

7

8

9

10

<Loggers>

<Logger name="com.test.app.dao" additivity="false" level="<a href="" target="_blank" class="baidu-highlight">TRACE</a>">

<AppenderRef ref="sql_log"/>

<AppenderRef ref="Console"/>

</Logger>

<Logger name="com.test.app" additivity="false" level="TRACE">

<AppenderRef ref="biz_debug"/>

<AppenderRef ref="Console"/>

</Logger>

</Loggers>

二、如何让mybatis打印出执行的sql

mybatis默认使用log4j,当有self4j这个日志jar包存在时会无法打印sql,请移除或者在工程启动时显示设置mybatis使用的日志类:

log4j.logger.org.apache.ibatis=debug,stdout log4j.logger.java.sql=debug,stdout

这样有时可能却不是个可行的办法,原因在于不可能移除self4j包,因为其他依赖包必须依赖这个包。 mybatis有如下方法来手动选择日志类,调用后成功打印日志如果引用了slf4j的包,并且要使用log4j需要加入slf4j-log4j12的包,如果没有加入slf4j-log4j12的包是无法打印sql的。。具体log4j文件如下:

log4j.rootCategory=info, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.Conversion

Pattern=[QC]%p [%t]%C.%M(%L)|%m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

log4j.appender.R.File=D:\\report.log

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%d-[TS]%p%t%c-%m%n

log4j.logger.com.ibatis=debug

log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug

log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug

log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug

log4j.logger.java.sql.Connection=debug

log4j.logger.java.sql.Statement=debug

log4j.logger.java.sql.PreparedStatement=debug,stdout

现在重启tomcat,执行一条语句看看,sql是不是都出来了

三、mybatis怎么配置log4j打印出sql语句

在程序调试时mybatis并没有hibernate所提供的showsql功能,只能通过配置log4j日志输出级别的方式来打印sql。但网上搜到的答案几乎都是下面的配置方式:

log4j.rootLogger=info,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

###显示SQL语句部分

log4j.logger.com.ibatis=DEBUG

log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG

log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG

log4j.logger.java.sql.Connection=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG12345678910111234567891011

rootLogger的级别是info,防止其他地方输出debug的调试代码(rootLogger若设为debug了,mybatis也没必要再设置了)。但这段代码根本没有作用!不知是不是我使用的jar包版本比较新的缘故(3.4.1)。经过一系列的尝试,终于找到了解决方案,直接修改dao层的输出级别即可:

<loggers>

<Logger name="com.github.vita.code.dao" level="trace"/>

<root level="info">

<appender-ref ref="Console"/>

</root>

</loggers>123456123456

上面的是log4j 2的XML配置,1中对应的为log4j.logger.com.github.vita.code.dao=trace。这儿把输出调成了更低的trace,可以看到更详细的信息。

四、如何控制Mybatis的SQL日志输出

您好,很高兴为您解答。

使用环境:Mybatis_3.2.8+ Log4j2_2.1

首先要说明的是:

Mybatis是用Mapper类的全路径名,作为logger的名称的。

Mybatis中,打印SQL语句的日志级别是DEBUG,而打印SQL执行结果集的日志级别是TRACE。

比如,我们的应用是:com.test.app

而mapper类所在的路径为:com.test.app.dao

则我们可以分别控制应用的业务日志和SQL日志的输出。

如下的Log4j2.xml将输出所有业务日志,以及SQL语句日志

引用

<Loggers>

<Loggername="com.test.app.dao"additivity="false"level="DEBUG">

<AppenderRefref="sql_log"/>

<AppenderRefref="Console"/>

</Logger>

<Loggername="com.test.app"additivity="false"level="TRACE">

<AppenderRefref="biz_debug"/>

<AppenderRefref="Console"/>

</Logger>

</Loggers>

如下的Log4j2.xml将输出所有业务日志,以及SQL语句日志,SQL语句执行结果日志

引用

<Loggers>

<Loggername="com.test.app.dao"additivity="false"level="TRACE">

<AppenderRefref="sql_log"/>

<AppenderRefref="Console"/>

</Logger>

<Loggername="com.test.app"additivity="false"level="TRACE">

<AppenderRefref="biz_debug"/>

<AppenderRefref="Console"/>

</Logger>

</Loggers>

如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~

热门标签
    关注我们