解决springmvc整合Mybatis的Log4j日志输出问题

 更新时间:2021年07月14日 09:41:30   作者:烈空小Y  
这篇文章主要介绍了解决springmvc整合Mybatis的Log4j日志输出问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springmvc整合Mybatis的Log4j日志输出

当我们进行web开发的时候总是看到配置的log4j日志在控制台无法显示mybatis的主要是指sql、参数、结果,出现这种问题有两种情况:

第一种情况

下面文档描述的mybatis本身内置很多种日志框架使用,所以如果我们要用具体哪个日志框架,就需要进行相应mybatis配置,或者就是按照mybatis本身规则运行。

问题在这里文档:http://mybatis.github.io/mybatis-3/zh/logging.html

配置方式:新增文件,有就直接添加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="LOG4J"/>  
    </settings>  
</configuration>

再把这个文件添加到:

<!--(主库)整合相应的MyBatis持久层相应的插件并注册相应的MyBatis模板 (dataSource1 主库数据源)-->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dynamicDataSource" />
      <property name="configLocation" value="classpath:mybatis-config.xml"></property><!-- 配置mybatis的日志记录 -->  
      <property name="mapperLocations" value="classpath*:com/belle/finance/**/**/daomapper/mapper/*Mapper.xml"/>
    </bean> 

这样就配置好了,使用log4j进行日志记录不会运行mybatis自身规则。

第二种情况

就是log4j的日志级别使用错误,导致mybatis信息打印不出来;

日志级别

每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:

A:off 最高等级,用于关闭所有日志记录。

B:fatal 指出每个严重的错误事件将会导致应用程序的退出。

C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。

D:warm 表明会出现潜在的错误情形。

E:info 一般和在粗粒度级别上,强调应用程序的运行全程。

F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。

G:all 最低等级,用于打开所有日志记录。

上面这些级别是定义在org.apache.log4j.Level类中。Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。通过使用日志级别,可以控制应用程序中相应级别日志信息的输出。例如,如果使用b了info级别,则应用程序中所有低于info级别的日志信息(如debug)将不会被打印出来。

根据上面的log4j的说明,另外根据mybatis的细粒度得出,mybatis要把log4j的日志至少配置到DEBUG级别,才能显示出sql日志,如下:

log4j.logger.com.demo.user=DEBUG

Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j
  • JDK logging

具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。 如果一个都未找到,日志功能就会被禁用。

不少应用服务器的classpath中已经包含Commons Logging,如Tomcat和WebShpere, 所以MyBatis会把它作为具体的日志实现。记住这点非常重要。

这将意味着,在诸如 WebSphere的环境中——WebSphere提供了Commons Logging的私有实现,你的Log4J配置将被忽略。

这种做法不免让人悲催,MyBatis怎么能忽略你的配置呢?事实上,因Commons Logging已经存 在了,按照优先级顺序,Log4J自然就被忽略了!

不过,如果你的应用部署在一个包含Commons Logging的环境, 而你又想用其他的日志框架,你可以通过在MyBatis的配置文件mybatis-config.xml里面添加一项setting(配置)来选择一个不同的日志实现。

Log4j实现日志输出功能

一、为什么要配置mybtis的logger?

mybatis自己设计以及实现了org.apache.ibatis.logging.Log接口。

Mybatis为了避免对第三方的日志包存在强依赖,内部的Log采用了代理模式。通过配置的方式,代理真实的日志对象. 如果没有配置log,mybatis会按照以下顺序尝试加载日志输出类:

  1. SLF4J
  2. Apache Commons Logging
  3. Log4j 2
  4. Log4j
  5. JDK logging
  6. no logging(没有日志)

二、如何开启日志输出?

2.1 下载log4j的jar包并导入到build path下

在这里插入图片描述

2.2 开启日志输出的配置

在config.xml文件中的settings元素中配置日志实现类。

	<settings>
		<setting name="logImpl" value="LOG4J"/>
	</settings>

2.3 编写一个文件:log4j.properties放在类路径下面

第一行表示日志输出的级别的debug级别,Console表示输出位置是控制台(可以输出到文件或数据库,可以是发邮件)。

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

2.4 log4j的日志输出的级别:

  1. DEBUG < INFO < WARN < <ERROR < FATAL
  2. DEBUG :流经系统的详细信息。最低级别的日志输出,一般用于开发阶段的调试。
  3. INFO :一般消息输出(启动、关闭)
  4. WARN :警告输出
  5. ERROR :错误输出
  6. FATAL :导致应用程序提前终止的严重错误。一般这些信息将立即呈现在状态控制台上。

查看日志输出

debug基本的输出可以清楚地看到连接数据库的详细信息。

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Redis作为缓存应用的情形详细分析

    Redis作为缓存应用的情形详细分析

    实际开发中缓存处理是必须的,不可能我们每次客户端去请求一次服务器,服务器每次都要去数据库中进行查找,为什么要使用缓存?说到底是为了提高系统的运行速度
    2023-01-01
  • 教你怎么用Java获取国家法定节假日

    教你怎么用Java获取国家法定节假日

    这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • mybatis同一张表多次连接查询相同列赋值问题小结

    mybatis同一张表多次连接查询相同列赋值问题小结

    这篇文章主要介绍了mybatis同一张表多次连接查询相同列赋值问题,非常不错,具有参考借鉴价值,需要的的朋友参考下
    2017-01-01
  • Java实现屏幕截图工具的代码分享

    Java实现屏幕截图工具的代码分享

    这篇文章主要为大家介绍了如何利用Java语言编写一个电脑屏幕截图工具,文中的示例代码讲解详细,对我们学习有一定的帮助,需要的可以参考一下
    2022-05-05
  • JAVA设计模式---原型模式你了解吗

    JAVA设计模式---原型模式你了解吗

    这篇文章主要介绍了JAVA 原型模式的的相关资料,文中讲解非常细致,实例帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2021-09-09
  • Java系统的高并发解决方法详解

    Java系统的高并发解决方法详解

    这篇文章主要介绍了Java系统的高并发解决方法,内容十分丰富,在这里分享给大家,需要的朋友可以参考。
    2017-09-09
  • mybatis-plus批量插入优化方式

    mybatis-plus批量插入优化方式

    MyBatis-Plus的saveBatch()方法默认是单条插入,通过在JDBC URL添加rewriteBatchedStatements=true参数启用批量插入,官方提供的sql注入器可自定义方法,如InsertBatchSomeColumn实现真批量插入,但存在单次插入数据量过大问题,可通过分批插入优化,避免超出MySQL限制
    2024-09-09
  • Springboot导出文件,前端下载文件方式

    Springboot导出文件,前端下载文件方式

    这篇文章主要介绍了Springboot导出文件,前端下载文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Gradle构建基本的Web项目结构

    Gradle构建基本的Web项目结构

    这篇文章主要为大家介绍了Gradle创建Web项目基本的框架结构搭建,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java检查日期字符串是否合法的方法总结

    Java检查日期字符串是否合法的方法总结

    后端接口在接收数据的时候,都需要进行检查。检查全部通过后,才能够执行业务逻辑。本文总结了四个Java检查日期字符串是否合法的方法,感兴趣的可以了解一下
    2022-10-10

最新评论