SpringBoot配置log4j2,将MyBatis日志打印到log4j2中

近期需要做一个小的服务,最后决定使用SpringBoot框架做,期间遇到了一些坑,现在总结一下,以防后续踩坑。

  • 本人使用的SpringBoot版本是2.5.3,对应的log4j2的版本是2.2.5,MyBatis使用的是SpringBoot自带的依赖:版本2.0.0    
  • 引入依赖,记得移除SpringBoot自带的logging;
        
            org.springframework.boot
            spring-boot-starter-web
            
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                
                
                    ch.qos.logback
                    logback-classic
                
            
        
        
        
            org.springframework.boot
            spring-boot-starter-log4j2
            2.2.5.RELEASE
        
  • 首先在SpringBoot中配置log4j2,log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".   此处本人新建的为xml文件,根据个人习惯自行决定,名字可以为log4j2.xml或者像图中也可。文件的存放目录放在resources下。
  • 配置文件不需要在yml或yaml文件中配置,直接放入到resources目录下即可,本人测试在yml文件中配置路径与不配置一样生效,不用纠结(我就是纠结很久,最后SpringBoot会自己查找,尴尬)。

 SpringBoot配置log4j2,将MyBatis日志打印到log4j2中_第1张图片

 log4j2配置文件的内容如下:






    
    
        
        
            
            
        



        
            
                
                %d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n
            
        
		
        
            
            
            
            
            
                
                
            
            
            
        

    
    
    
        
        
            
            
            
        

        
            
            
        
    

配置好log4j2的文件并放到对应位置后即可在代码块中添加日志测试一下了。

  • 现在测试一下日志是否打印出来,在自己的controller层或者serviceImp层添加调用,此处本人是在controller层。
@Controller
@RequestMapping("/test")
public class DeptController {
    //slf4j 日志   推荐第一条写法
    Logger logger = LoggerFactory.getLogger(this.getClass());
    //Logger logger = LoggerFactory.getLogger(DeptController .getClass());

    @Autowired
    private DeptService deptService;
    @Autowired
    DataSource dataSource;

    @RequestMapping("testDb")
    @ResponseBody
    public String testDb() {
        int dept = 10;
        String res = deptService.SelDept(dept).toString();
        logger.info("===========info=========");
        logger.info("===========warn=========");
        logger.info("===========error=========");
        return res;
    }
}
  • 启动测试结果,可以正常打印

 

 到此处,log4J2的配置完成,现在配置将MyBatis的sql语句输出到log4j2的日志文件中。

配置MyBatis的SQL日志打印到log4j2的日志文件中

  • 首先在resources目录下新建MyBatis.xml文件

SpringBoot配置log4j2,将MyBatis日志打印到log4j2中_第2张图片

  • 配置文件内容如下 :由于本人使用的数据源与连接池为dbcp2,MyBatis中的配置都为空,此处MyBatis.xml配置文件中只配置了日志功能。这个不用纠结,如果使用的是Mybatis的数据源与连接池,只需将settings内容加入到配置文件中即可。



    
    
        
    
  •  经过本人尝试,无需在yml文件中添加config-location: classpath:MyBatis.xml到配置文件中,配置也可生效,此处本人又纠结很久,SpringBoot会自动扫描

SpringBoot配置log4j2,将MyBatis日志打印到log4j2中_第3张图片

  •  在log4j2配置文件中添加dao层(mapper)文件的路径配置,就是调用mapper.xml文件中sql语句的文件的目录,例如本人的dao路径就为com.****.acquire.dao, DeptDao文件中调用mapper.xml中的sql。

 SpringBoot配置log4j2,将MyBatis日志打印到log4j2中_第4张图片

  • 本人测试调用以下sql,id为SelDept




    

  • log4j2的配置文件中有这段,注意!此处是坑!  level一定要写为debug,ref="TollingFileInfo"意思是将日志输出到name=“TollingFileInfo”的文件中,level一定为debug,不然sql日志不能打印到文件中,log4j2的配置文件中有下图配置。

     
     
     

SpringBoot配置log4j2,将MyBatis日志打印到log4j2中_第5张图片

  • 测试 ,控制台与日志文件都正常输出了sql

 

  • 就此成功 

总结:

  1.  配置log4j2时可以直接使用springboot的依赖,包含slf4j。

  2. SpringBoot会自动扫描log4j2与MyBatis的配置文件。
  3. log4j2的配置文件中的日志等级一定要设置正确,否则mybatis的sql日志打印不能进日志文件中。
  4. mybatis.configuration.log-impl="org.apache.ibatis.logging.stdout.StdOutImpl" 只能在控制台打印mybatis的sql,不能在日志文件中写入。
  5. log42中的....中的name一定是调用mybatis.xml中的语句的那个文件的目录。一般为xxxx.xxx.dao或者xxxx.xxx.mapper,看个人怎么起名字的。

你可能感兴趣的:(spring,maven,intellij-idea)