Mybatis日志 与 log4j的使用

提示:文章中有一部分来自于Mybatis官方文档,地址:Mybatis


前言

提示:本文的大概内容:

Mybatis的日志功能是一个很重要的功能,开启日志可以在控制台打印sql语句从而检查错误


提示:以下是本篇文章正文内容,下面案例可供参考

一、Mybatis标准日志实现

Mybatis 通过使用内置的日志工厂提供日志功能。
内置日志工厂将会把日志工作委托给下面的实现之一:

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

MyBatis 内置日志工厂会基于运行时检测信息选择日志委托实现。它会(按上面罗列的顺序)使用第一个查找到的实现。当没有找到这些实现时,将会禁用日志功能。
我们可以通过设置 设定日志的具体实现

通过配置设置日志

logImpl

值列表
默认值:未设置

  • SLF4J
  • LOG4J
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING 【标准日志输出】
  • NO_LOGGING

mybats默认是没有日志的
setting例子语法:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

标准日志工厂的实现

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

结果

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6cc583bc] was not registered for synchronization because synchronization is not active
JDBC Connection [com.alibaba.druid.pool.DruidStatementConnection@662e3fe3] will not be managed by Spring
==>  Preparing: select * from performinfo
==> Parameters: 
<==    Columns: id, title, perfortype, performstar, performpice, performshows, performplace, performstarttime, performendtime, performheat, performposters, performdiscount, isDelete
<==        Row: 1, 测试数据周杰伦, 0, zelei, 100, 测试演出, 北京, 2024-04-25 10:43:05, 2024-04-25 10:43:05, 0, https://img.alicdn.com/bao/uploaded/https://img.alicdn.com/imgextra/i1/2251059038/O1CN01hS60bF2GdSahX94Nl_!!2251059038.jpg_q60.jpg_.webp, null, 0
<==        Row: 2, 只唱青花瓷, 0, 周杰伦, 100, 测试演出, 北京, 2024-04-25 20:20:50, 2024-04-25 20:20:50, 0, https://img.zcool.cn/community/01d2a95d542b13a8012187f4eccaed.jpg@1280w_1l_2o_100sh.jpg, null, 0
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6cc583bc]

二、Mybatis Log4J实现

什么是Log4J

Log4j ( Logger For Java ) , Java 日志的记录包。 log4j中文文档

  • Log4j是Apache的一个开源项目
  • 通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;
  • 我们也可以控制每一条日志的输出格式
  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,
  • 这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码

1. 需要先导入 Log4J的包

代码如下(示例):

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>

2.配置log4j

log4j.properties 文件

log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=【%c】-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/kuang.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=【%p】【%d{yy-MM-dd}】【%c】%m%n

#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

3.配置log4j为日志的实现

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

4.log4j的使用

直接运行
输出:

五月 14, 2024 11:46:34 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring DispatcherServlet 'dispatcherServlet'
?org.springframework.jdbc.datasource.DataSourceUtils?-Fetching JDBC Connection from DataSource
?org.mybatis.spring.transaction.SpringManagedTransaction?-JDBC Connection [com.alibaba.druid.pool.DruidStatementConnection@3d96ca0a] will not be managed by Spring
?com.atzelei.wechatmai2.dao.PerformInfoMapper.getAllPerformInfo?-==>  Preparing: select * from performinfo
?com.atzelei.wechatmai2.dao.PerformInfoMapper.getAllPerformInfo?-==> Parameters: 
?com.atzelei.wechatmai2.dao.PerformInfoMapper.getAllPerformInfo?-<==      Total: 2
?org.mybatis.spring.SqlSessionUtils?-Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2744b328]
?org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor?-Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
?org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor?-Writing [BaseResponse(code=0, data=[PerformInfo(id=1, title=测试数据周杰伦, perfortype=0, performstar=zelei, perform (truncated)...]
?org.springframework.web.servlet.DispatcherServlet?-Completed 200 OK

三、springboot整合启动mybats的log4j日志:

1.导入依赖:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2.由于springboot的默认日志logback会与log4j冲突所以需要屏蔽掉:

 <dependency>
   <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
     <exclusions>
         <!-- 排除自带的logback依赖 -->
         <exclusion>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-logging</artifactId>
         </exclusion>
     </exclusions>
 </dependency>

3.在yml配置文件中加上:

logging:
  level:
    org.springframework.boot.autoconfigure: error

4.编辑log4j.properties 文件

log4j.rootLogger=debug,console,file

#??????????
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=debug
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=?%c?-%m%n

#?????????
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/zelei.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=?%p??%d{yy-MM-dd}??%c?%m%n

#??????
log4j.logger.org.mybatis=debug
log4j.logger.java.sql=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.ResultSet=debug
log4j.logger.java.sql.PreparedStatement=debug


#??logger??????  ??????sql
log4j.logger.com.atzelei.wechatmai2.dao=debug //这一行很关键 com.atzelei.wechatmai2.dao是mapper文件所在的包

结果:

五月 14, 2024 11:46:34 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring DispatcherServlet 'dispatcherServlet'
?org.springframework.jdbc.datasource.DataSourceUtils?-Fetching JDBC Connection from DataSource
?org.mybatis.spring.transaction.SpringManagedTransaction?-JDBC Connection [com.alibaba.druid.pool.DruidStatementConnection@3d96ca0a] will not be managed by Spring
?com.atzelei.wechatmai2.dao.PerformInfoMapper.getAllPerformInfo?-==>  Preparing: select * from performinfo
?com.atzelei.wechatmai2.dao.PerformInfoMapper.getAllPerformInfo?-==> Parameters: 
?com.atzelei.wechatmai2.dao.PerformInfoMapper.getAllPerformInfo?-<==      Total: 2
?org.mybatis.spring.SqlSessionUtils?-Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2744b328]
?org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor?-Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
?org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor?-Writing [BaseResponse(code=0, data=[PerformInfo(id=1, title=测试数据周杰伦, perfortype=0, performstar=zelei, perform (truncated)...]
?org.springframework.web.servlet.DispatcherServlet?-Completed 200 OK

四、log4j的简单使用

得到日志对象:

static Logger logger = Logger.getLogger(WeChatMai2ApplicationTests.class);

三个常用方法:

@Test
void testLog4j()
{
   logger.info("进入了testLog4j方法");
   logger.debug("testLog4j方法bebug");
   logger.error("testLog4j方法error");
}

总结

提示:这里对文章进行总结:
以上内容均为原创,作者水品有限,如有错误请私信我
log4j是一个很方便的工具,企业中经常用到

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值