spring boot mybatis日志输出到控制台的方法实践
在开发过程中我们往往需要打印出SQL语句,这样就方便我们监控问题。下面我来简单的介绍一下我使用过的两种方法,一种需要使用log4j,一种需要在MyBatis的配置文件里配置。
日志级别设置
日志记录器(Logger)的行为是分等级的。分为: OFF FATAL WARN INFO DEBUG TRACE ALL ;
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。 比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。
如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、WARN、 ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。
第一种方法:
直接使用Log4j输出SQL语句。这种方法比较简单,只需要在log4j的配置文件(log4j.properties)里面进行配置,不需要进行其他额外的配置,当然,这里需要使用log4j的jar包,如果使用maven,那么在pom文件里面添加即可。
log4j.properties配置文件:
### 日志级别设置 ### log4j.rootLogger = INFO , C , D , E ### 控制台打印 ### log4j.appender.C = org.apache.log4j.ConsoleAppender log4j.appender.C.Target = System.out log4j.appender.C.layout = org.apache.log4j.PatternLayout log4j.appender.C.layout.ConversionPattern = [test][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n ### 文件输出 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = ../logs/test.log log4j.appender.D.Append = true log4j.appender.D.Threshold = INFO log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = [test][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n ### exception ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File = ../logs/test_error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = [test][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n
下面这段是重点
###############Log4j 4 SQL Output start################# log4j.logger.com.***.***.dao=DEBUG log4j.logger.com.springframework=DEBUG 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 log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl=DEBUG log4j.logger.java.sql=DEBUG,CONSOLE ###############Log4j 4 SQL Output end###################
com.***.***.dao 是你的 Dao包所在的路径
通过上面的配置后,即可在控制台查看mybatis执行的SQL语句。
第二种方法:
在mybatis配置文件的<settings>标签里面添加如下语句:
<setting name="logImpl" value="STDOUT_LOGGING" />
具体如:
<settings> <!-- 打印查询语句 这种方式不需要进行log4j配置 --> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings>
如果使用spring集成了mybatis,那么就直接在spring-mybatis文件里的mybatis配置标签里添加上面的语句即可。
如果配置文件里没有<settings>标签,我们可以新建一个mybatis-config.xml文件,然后在spring-mybatis(spring集成mybatis的配置文件)里引入该文件即可,具体如下:
1. 新建的mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 打印查询语句 这种方式不需要进行log4j配置 --> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> </configuration>
2. spring-mybatis.xml中引入的mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd "> <!-- 配置数据源 使用的是Druid数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="0" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="20" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="0" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000" /> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> <!-- 用来检测有效sql --> <property name="validationQuery" value="${validationQuery}" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> <!-- 监控数据库 --> <property name="filters" value="mergeStat" /> </bean> <!-- myBatis文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 引入打印查询语句的配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --> <property name="mapperLocations" value="classpath:com/zhh/merchantwap/mapping/*.xml" /> <!-- pageHelper 分页插件 --> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageHelper"> <property name="properties"> <value> dialect=Oracle </value> </property> </bean> </array> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.zhh.merchantwap.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 注解方式配置事物 --> <!-- <tx:annotation-driven transaction-manager="transactionManager" /> --> <!-- 拦截器方式配置事物 --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="select*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> <!-- Spring aop事务管理 --> <aop:config> <aop:pointcut id="transactionPointcut" expression="execution(* com.zhh.merchantwap.service..*Impl.*(..))" /> <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" /> </aop:config> </beans>
引入的标签:<property name="configLocation" value="classpath:mybatis-config.xml"></property>
通过上面的配置,我们就可以在控制台查看执行的SQL语句了。
因为每个项目的配置文件都不太一样,所以具体配置标签所在的位置得根据情况来定。
到此这篇关于spring boot mybatis日志输出到控制台的方法实践的文章就介绍到这了,更多相关spring boot mybatis日志输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
HttpServletRequest对象常用功能_动力节点Java学院整理
这篇文章主要为大家详细介绍了HttpServletRequest对象常用功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-07-07Mybatis单个参数的if判断报异常There is no getter for property named ''x
今天小编就为大家分享一篇关于Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-12-12解读CommandLineRunner或者ApplicationRunner接口
这篇文章主要介绍了解读CommandLineRunner或者ApplicationRunner接口的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-02-02
最新评论