mybatis日志输出

    使用过hibernate的朋友都知道,hibernate会将执行的sql打印到日志中。

    打印出执行的sql好处不言而喻,那么mybatis如何将日志打印出来呢。

  

    1.在pom.xml中添加依赖

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.7.2</version>
</dependency>
            会下载以下3个jar包

   

    如果您不是使用maven管理jar包,那就下载这三个jar加载到项目classpath路径下即可。


    2.在根目录下添加log4j.properties文件

   

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

          说明:须将日志级别调到DEBUG级别,mybatis才会进行sql输出。个人验证一下,确实如此。

  

    3.控制台输出结果

[main] DEBUG [com.neutron.flowers.mapper.userMapper.query] - ==>  Preparing: select id,name,age from users where id = ? 
[main] DEBUG [com.neutron.flowers.mapper.userMapper.query] - ==> Parameters: 1(Integer)
[main] DEBUG [com.neutron.flowers.mapper.userMapper.query] - <==      Total: 1
User [id=1, name=zhangsan, age=15]

        

     4.使用log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
		</layout>
	</appender>
	<logger name="java.sql">
		<level value="debug" />
	</logger>
	<logger name="org.apache.ibatis">
		<level value="debug" />
	</logger>
	<root>
		<level value="debug" />
		<appender-ref ref="STDOUT" />
	</root>
</log4j:configuration>
           注意:两种配置文件使用一种即可,其中xml配置在某种程度更加清晰易懂

    5.输出结果如下   

DEBUG 07-06 07:12:19,964 Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.  (LogFactory.java:135) 
DEBUG 07-06 07:12:20,254 PooledDataSource forcefully closed/removed all connections.  (PooledDataSource.java:316) 
DEBUG 07-06 07:12:20,254 PooledDataSource forcefully closed/removed all connections.  (PooledDataSource.java:316) 
DEBUG 07-06 07:12:20,254 PooledDataSource forcefully closed/removed all connections.  (PooledDataSource.java:316) 
DEBUG 07-06 07:12:20,254 PooledDataSource forcefully closed/removed all connections.  (PooledDataSource.java:316) 
DEBUG 07-06 07:12:20,443 Opening JDBC Connection  (JdbcTransaction.java:138) 
DEBUG 07-06 07:12:20,969 Created connection 1884171537.  (PooledDataSource.java:387) 
DEBUG 07-06 07:12:20,974 ==>  Preparing: select id,name,age from users where id = ?   (BaseJdbcLogger.java:145) 
DEBUG 07-06 07:12:21,045 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 07-06 07:12:21,089 <==      Total: 1  (BaseJdbcLogger.java:145) 
DEBUG 07-06 07:12:21,090 Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@704e2d11]  (JdbcTransaction.java:92) 
DEBUG 07-06 07:12:21,090 Returned connection 1884171537 to pool.  (PooledDataSource.java:344) 
User [id=1, name=zhangsan, age=15]

            

### MyBatis 中配置日志输出的方法 MyBatis 支持多种方式来配置日志输出,以便开发者能够监控 SQL 执行情况以及调试应用程序。以下是具体的配置方法: #### 1. 使用内置的日志实现 (STDOUT_LOGGING) 可以通过在 MyBatis 的 `mybatis-config.xml` 文件中设置 `<settings>` 节点中的 `logImpl` 属性为 `STDOUT_LOGGING` 来启用标准输出日志[^3]。 ```xml <configuration> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> </configuration> ``` 这种方式会将所有的日志信息直接打印到控制台,适合简单的测试环境或快速验证 SQL 是否正常工作。 --- #### 2. 使用 Log4j 进行日志管理 Log4j 是一种流行的日志框架,支持丰富的日志级别和灵活的配置选项。要让 MyBatis 使用 Log4j 输出日志,需完成以下步骤: - **引入依赖** 如果项目使用 Maven 构建,则需要在 `pom.xml` 中添加 Log4j 的依赖项[^2]: ```xml <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> ``` - **配置 log4j.properties 或 log4j.xml** 创建并配置 `log4j.properties` 文件以定义日志行为: ```properties log4j.rootLogger=DEBUG, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG ``` 上述配置设置了 `org.mybatis` 和 `java.sql` 包下的日志级别为 DEBUG,从而可以捕获 MyBatis 执行的 SQL 及其参数[^1]。 --- #### 3. 使用 SLF4J 结合其他日志框架 SLF4J(Simple Logging Facade for Java)是一个抽象层,允许用户切换不同的底层日志实现而不修改代码。通过 SLF4J,可以选择 Logback、Log4j 等作为实际的日志处理工具。 - **Maven 依赖** 添加 SLF4J 和具体日志实现的绑定库,例如 Logback: ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- 绑定 Logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> ``` - **配置文件** 编辑 `logback.xml` 文件以定制日志输出规则: ```xml <configuration> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%date{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="org.mybatis" level="DEBUG"/> <root level="INFO"> <appender-ref ref="console"/> </root> </configuration> ``` 这种组合提供了更高的灵活性和可维护性[^4]。 --- #### 4. 默认日志机制 如果没有显式指定任何日志实现,MyBatis 将尝试按以下优先级顺序检测可用的日志框架,并选择第一个匹配的实现: 1. SLF4J 2. Apache Commons Logging 3. Log4j 4. JDK logging 5. NoLogging(无日志) 如果以上均不可用,则不会记录任何日志。 --- #### 日志级别说明 日志通常分为多个等级,从低到高分别是:DEBUG < INFO < WARN < ERROR < FATAL[^5]。可以根据业务需求调整各个包的日志级别,例如仅显示错误信息或将所有细节暴露出来用于排查问题。 --- ### 总结 MyBatis 提供了多样化的日志配置方案,既可以直接利用简单的方式如 STDOUT_LOGGING 实现基础功能,也可以借助强大的第三方日志框架(如 Log4j、SLF4J/Logback)满足复杂场景的需求。合理规划日志策略有助于提升开发效率与系统稳定性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值