提示:文章中有一部分来自于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是一个很方便的工具,企业中经常用到