mybatis 的日志实现
1、日志工厂
设置具体的日志实现在mybatis-config.xml配置文件中setting标签中的logImpl属性
分别有:
- SLF4J
- LOG4J (常用)
- LOG4J2 (log4j升级版,在不同情况下性能不同)
- JDK_LOGGING (JDK集成的默认日志实现)
- COMMONS_LOGGING
- STDOUT_LOGGING (不需要配置拿来就能用的日志)
- NO_LOGGING (不使用任何日志)
先使用STDOUT_LOGGING这个最简单的日志实现体验一下功能
首先,在mybatis-config.xml配置文件中设置setting标签中的logImpl属性
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
运行一下,看一下日志输出了哪些具体东西:
可以看到输出了许多信息:
- Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter(使用的日志实现)
- Opening JDBC Connection (打开一个JDBC连接)
- Created connection 1293618474. (创建一个连接)
- Setting autocommit to false on JDBC Connection(设置自动提交为false)
- Preparing: select * from user where id=? (预编译的语句)
- Parameters: 1(Integer) (参数的数量以及类型)
- Columns: id, user_name, user_password (要查询的字段名)
- Row: 1, 陈修行_new, 5555 (具体的值)
- Total: 1 (共计为1)
可以看到输出的信息还是十分全面的。不过做不到许多自定义的功能
2、log4j
为了更全面的日志功能,和自由的自定义调试输出,log4j来了
先把logImpl的值改为LOG4J
<settings>
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<setting name="logImpl" value="LOG4J"/>
</settings>
然后导入log4j依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
因为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/Test.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
P.S. log4j在此仅作简单的应用 关于log4j配置文件更详细的资料参考具体文章
运行:
可以看到输出的结果与上一个STDOUT_LOGGING基本一致,同时在./log/Test.log的位置生成了一篇同样的日志
3、在调试中使用log4j
有了如此工具,我们就不用在每次调试的时候在控制台使用System.out输出了,通过简单的一行代码就可以在各种类中使用日志输出
public class MyTest {
static Logger logger = Logger.getLogger(MyTest.class);
@Test
public void log4jTest(){
logger.info("info:进入了log4jTest");
logger.debug("debug:进入了log4jTest");
logger.error("error:进入了log4jTest");
}
}
不同的方法代表了不同的级别,在项目合适的地方加上不同级别的日志输出是一个必不可少的行为。
4、总结
如此 log4j 就算可以简单地使用了,在后续的项目中会是一个得力的工具