本文为 SSM 框架系列之 MyBatis 第六部分:日志
其它内容的链接如下:
【1】MyBatis01:初识 MyBatis 与 第一个 MyBaits 程序
【2】MyBatis02:CRUD 操作
【3】MyBatis03:配置解析
【4】MyBatis04:作用域和生命周期
【5】MyBatis05:分页
【6】MyBatis06:日志
【7】MyBatis07:使用注解开发
【8】MyBatis08:ResultMap 的结果集映射
【9】MyBatis09:动态 SQL 与缓存
传送门:
1 日志
1.1 日志工厂
参考官方文档【传送门】。
Mybatis 通过使用内置的日志工厂提供日志功能,内置日志工厂将会把日志工作委托给下面的实现之一:
- SLF4J
- Apache Commons Logging
- Log4j
- Log4j 2
- JDK logging
Mybatis 会按上面罗列的顺序使用第一个查找到的实现,当没有找到这些实现时,将会禁用日志功能。
因为不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging,所以此时 MyBatis 会把 Commons Logging 作为日志工具。这个时候如果想使用其它日志实现,可以通过在 MyBatis 配置文件 mybatis-config.xml
里面添加一项 setting 来选择其它日志实现。
1.2 Log4j
1.2.1 Log4j 的日志级别
级别 | 含义 |
---|---|
DEBUG | 输出调试信息;指出细粒度信息事件对调试应用程序是非常有帮助的 |
INFO | 输出提示信息;消息在粗粒度级别上突出强调应用程序的运行过程 |
WARN | 输出警告信息;表明会出现潜在错误的情形 |
ERROR | 输出错误信息;指出虽然发生错误事件,但仍然不影响系统的继续运行 |
FATAL | 输出致命错误;指出每个严重的错误事件将会导致应用程序的退出 |
ALL level | 打开所有日志记录开关;是最低等级的,用于打开所有日志记录 |
OFF level | 关闭所有日志记录开关;是最高等级的,用于关闭所有日志记录 |
按照范围从小到大排序:OFF level > FATAL > ERROR > WARN > INFO > DEBUG > ALL level
;范围大的会包含范围小的,例如若日志设置为 INFO 级别的话则 FATAL、ERROR、WARN、INFO 的日志开关都是打开的,而 DEBUG 的日志开关将是关闭的。
Log4j 建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。
1.2.2 日志配置步骤 1:添加 Log4J 的 jar 包
在 Maven 的 .pom 文件中添加依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
1.2.3 日志配置步骤 2:日志配置文件编写
在 resources 中添加配置文件 log4j.properties
,加入以下配置内容:
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
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/sharm.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
1.2.4 日志配置步骤 3:setting 设置日志实现
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
1.2.5 日志配置步骤 4:在程序中使用 log4j 进行输出
// 注意导包:org.apache.log4j.Logger
// 固定写法
static Logger logger = Logger.getLogger(UserTest.class);
@Test
public void testSelectUser(){
logger.info("info:进入selectUser方法");
logger.debug("debug:进入selectUser方法");
logger.error("error: 进入selectUser方法");
SqlSession session = MyBatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectUser();
for (User user: users){
System.out.println(user);
}
session.close();
}
部分输出日志为:
1.3 自我总结
- 如果一个项目不更新了,那么有两种可能性,要么已经很完善了,要不已经跟不上时代了;
- 程序员要面向搜索编程;
- 要学会分析一个陌生的配置文件。
1.4 日常使用
在日常使用中,我常常在 MyBatis 的配置文件中加入如下代码,以达到查看 SQL 日志的功能,简单又方便。
<!-- 增加 MyBatis 日志 -->
<settings>
<!-- 没想到 name 属性的值必须是 logImpl,否则就找不到 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>