相关章节:
Mybatis使用xml方式配置
Mybatis使用xml方式配置(二)
Mybatis使用xml方式配置(三)
Mybatis使用xml方式配置(四)结果映射resultMap
官网地址:https://mybatis.org/mybatis-3/zh/configuration.html
在Mybatis使用xml方式配置(三)中,提到了日志的实现。这里就简单使用下其中的两种:
- SLF4J
- LOG4J
- LOG4J2
- JDK_LOGGING
- COMMONS_LOGGING
- STDOUT_LOGGING
- NO_LOGGING
1. STDOUT_LOGGING
标准日志
在mybatis-config.xml
文件中,加入对应的settings
标签,如下:
<!--核心配置文件-->
<configuration>
<properties resource="db.properties"/>
<settings>
<!--标准日志配置-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<typeAlias type="com.weizu.pojo.UserInfo" alias="userInfo"/>
</typeAliases>
...
</configuration>
注意放置的位置。配置的位置顺序如下:
此时,还是运行测试方法:
@org.junit.Test
public void find(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
// 查找,传入基本类型
UserInfo userInfoByID = mapper.findUserInfoByID(234);
System.out.println(userInfoByID); // success
}
结果:
D:\softwares\Java\jdk1.8.0_211\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\softwares\IntelliJ IDEA Community Edition 2020.2\lib\idea_rt.jar=58828:D:\softwares\IntelliJ IDEA Community Edition 2020.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\softwares\IntelliJ IDEA Community Edition 2020.2\lib\idea_rt.jar;D:\softwares\IntelliJ IDEA Community Edition 2020.2\plugins\junit\lib\junit5-rt.jar;D:\softwares\IntelliJ IDEA Community Edition 2020.2\plugins\junit\lib\junit-rt.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\charsets.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\deploy.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\access-bridge-64.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\cldrdata.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\dnsns.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\jaccess.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\jfxrt.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\localedata.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\nashorn.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\sunec.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\sunjce_provider.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\sunmscapi.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\sunpkcs11.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\ext\zipfs.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\javaws.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\jce.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\jfr.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\jfxswt.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\jsse.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\management-agent.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\plugin.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\resources.jar;D:\softwares\Java\jdk1.8.0_211\jre\lib\rt.jar;D:\project\pro\myStudyProject\MybatisPro\target\test-classes;D:\project\pro\myStudyProject\MybatisPro\target\classes;C:\Users\w\.m2\repository\mysql\mysql-connector-java\8.0.13\mysql-connector-java-8.0.13.jar;C:\Users\w\.m2\repository\com\google\protobuf\protobuf-java\3.6.1\protobuf-java-3.6.1.jar;C:\Users\w\.m2\repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;C:\Users\w\.m2\repository\junit\junit\4.13.2\junit-4.13.2.jar;C:\Users\w\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 Test,find
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 275266973.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@10683d9d]
==> Preparing: select * from userinfo where userid = ?
==> Parameters: 234(Integer)
<== Columns: username, userId, passwd
<== Row: 张三, 234, aaaa
<== Total: 1
UserInfo{username='张三', userid=234, passwd='aaaa'}
2. LOG4J
日志
- Log4j是Apache的一个开源项目
- 通过使用Log4j,我们可以控制日志信息输送的目的地:控制台,文本,GUI组件…
- 我们也可以控制每一条日志的输出格式;
- 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
- 这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
我们需要在pom.xml
文件中引入相关依赖:
<!--日志依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
然后,在resources
文件夹下,创建log4j
所需要的配置文件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/mylog.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
然后,在mybatis-config.xml
文件中,配置设置日志的实现方式为LOG4J
,即:
<configuration>
<properties resource="db.properties"/>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<typeAlias type="com.weizu.pojo.UserInfo" alias="userInfo"/>
</typeAliases>
...
</configuration>
值得一提的是,由于在我的mybatis-config.xml
文件中,我写了一些中文的注释,如:
<!--核心配置文件-->
然后,乱码,报了一个错误:
Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效。
在target
文件中,可以看见mybatis-config.xml
文件中的乱码
简单的解决方案就是删除原文件mybatis-config.xml
文件中的该注释即可。
最终测试结果:
可以看见测试的实现是Log4jImpl
实现。日志信息差不多。
在log4j
中提供了自己定义输出日志的方式:
导包时注意,导入的是org.apache.log4j.Logger;
我们在测试类中:
public class Test {
static Logger logger = Logger.getLogger(Test.class);
@org.junit.Test
public void find(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
// 自定义日志
logger.info("Get into method find to find userInfo by userId.");
// 查找,传入基本类型
UserInfo userInfoByID = mapper.findUserInfoByID(234);
System.out.println(userInfoByID); // success
}
...
}
在日志文件中,我们可以看见:
并且控制台也有该信息:
https://www.bilibili.com/video/BV1NE411Q7Nx?p=12
https://www.cnblogs.com/renxuw/p/13047424.html