赞
踩
在 Spring Cloud 项目中,生产环境需要打印mybatis的sql语句日志,但是mybatis打印的sql的默认日志级别是[debug],如果生产环境想看到sql语句,就必须开启[debug]级别的日志打印,这样做debug日志量过大,显然不可行。
根据StdOutImpl.java可看出日志都是System.out.println(s);的控制台输出,配置及源码如下:
- mybatis:
- type-aliases-package: com.jiafupeng.mapper
- mapper-locations: classpath:mapper/**/*.xml
- configuration:
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台输出日志
- public class StdOutImpl implements Log {
-
- public StdOutImpl(String clazz) {
- // Do Nothing
- }
-
- @Override
- public boolean isDebugEnabled() {
- return true;
- }
-
- @Override
- public boolean isTraceEnabled() {
- return true;
- }
-
- @Override
- public void error(String s, Throwable e) {
- System.err.println(s);
- e.printStackTrace(System.err);
- }
-
- @Override
- public void error(String s) {
- System.err.println(s);
- }
-
- @Override
- public void debug(String s) {
- System.out.println(s);
- }
-
- @Override
- public void trace(String s) {
- System.out.println(s);
- }
-
- @Override
- public void warn(String s) {
- System.out.println(s);
- }
- }
- mybatis:
- type-aliases-package: com.jiafupeng.mapper
- mapper-locations: classpath:mapper/**/*.xml
- configuration:
- log-impl: com.***.***.MySlf4jImpl # mybatis自定义日志输出实现类 并将[debug]日志输出成[info]日志
-
- @Slf4j
- public class MySlf4jImpl implements Log {
-
- public MySlf4jImpl(String clazz) {
- // Do Nothing
- }
-
- @Override
- public boolean isDebugEnabled() {
- // return log.isDebugEnabled();
- // 将debug级别输出权限改成info级别
- return log.isInfoEnabled();
-
- }
- ...
-
- @Override
- public void debug(String s) {
- // log.debug(s);
- // debug日志输出成info级别日志
- log.info(s);
- }
- ...
- }
- <!-- 日志输出级别 -->
- <root level="info">
- <appender-ref ref="FILE-INFO"/>
- </root>
-
- <!-- 如果想将mybatis-sql[info]日志单独输出到一个文件中,就加上如下配置 -->
- <!-- <logger name="com.jiafupeng.util.MySlf4jImpl" level="info" additivity="false">-->
- <!-- <appender-ref ref="FILE-SQL"/>-->
- <!-- </logger>-->
由于我工程里用的是多数据源,在整合mybatis时,每个数据源的注册类都自行扫描mapper接口和**Mapper.xml文件,所以我将application.yml中增加的关于mybatis的相关配置恢复到修改前的状态,然后在resource的对应mapper目录中加入mybatis-config.xml,并且在注册数据源中将此文件注册进去,并且在mybatis-config.xml中加入相应配置后,mybatis的SQL日志就以INFO的方式打印出来了。
注意,如果您的工程是单数据源,直接留用application.yml中增加的关于mybatis的相关配置即可。
如果您工程里已有此文件,请忽略此操作。
如果您工程里已有此文件,请忽略此操作。
- @Data
- @Configuration
- @MapperScan(basePackages = MyDruidDatasrouceConfig.PACKAGE, sqlSessionFactoryRef = "mySqlSessionFactory")
- @Slf4j
- public class MyDruidDatasrouceConfig {
- ......
-
- static final String CONFIG_LOCATION = "classpath:mapper/mybatis-config.xml";
-
- ......
-
- @Primary
- @Bean(name = "myDruidDatasrouceConfig ")
- public SqlSessionFactory mySqlSessionFactory(@Qualifier("myDruidDataSource") DataSource myDataSource) throws Exception {
-
- ......
-
- sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(CONFIG_LOCATION));
-
- return sessionFactory.getObject();
- }
直接将日志实现类加到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>
- ......
- <setting name="logImpl" value="com.***.***.MySlf4jImpl"/>
- ......
- </settings>
-
- </configuration>
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。