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

您所在的位置:网站首页 springboot打开mybatis日志 SpringBoot配置log4j2,将MyBatis日志打印到log4j2中

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

2024-07-13 00:59| 来源: 网络整理| 查看: 265

近期需要做一个小的服务,最后决定使用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会自己查找,尴尬)。

 

 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文件

配置文件内容如下 :由于本人使用的数据源与连接池为dbcp2,MyBatis中的配置都为空,此处MyBatis.xml配置文件中只配置了日志功能。这个不用纠结,如果使用的是Mybatis的数据源与连接池,只需将settings内容加入到配置文件中即可。  经过本人尝试,无需在yml文件中添加config-location: classpath:MyBatis.xml到配置文件中,配置也可生效,此处本人又纠结很久,SpringBoot会自动扫描

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

 

本人测试调用以下sql,id为SelDept select deptno,dname,loc from dept where deptno = #{deptno} log4j2的配置文件中有这段,注意!此处是坑!  level一定要写为debug,ref="TollingFileInfo"意思是将日志输出到name=“TollingFileInfo”的文件中,level一定为debug,不然sql日志不能打印到文件中,log4j2的配置文件中有下图配置。

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

 

就此成功  总结:  配置log4j2时可以直接使用springboot的依赖,包含slf4j。 SpringBoot会自动扫描log4j2与MyBatis的配置文件。log4j2的配置文件中的日志等级一定要设置正确,否则mybatis的sql日志打印不能进日志文件中。mybatis.configuration.log-impl="org.apache.ibatis.logging.stdout.StdOutImpl" 只能在控制台打印mybatis的sql,不能在日志文件中写入。log42中的....中的name一定是调用mybatis.xml中的语句的那个文件的目录。一般为xxxx.xxx.dao或者xxxx.xxx.mapper,看个人怎么起名字的。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3