Mybatis - 善用日志,会方便很多

前言

前面将Mybatis的核心配置文件的标签了解了一遍

工欲善其事必先利其器

其实,很多时候都被找BUG折磨着,学会使用日志,是一个很好的习惯


Setting 日志

在Mybatis中,设置好了日志选项,就在settings标签中

在这里插入图片描述

一共提供了SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 7种选项

我们只需要学会LOG4J 、STDOUT_LOGGING 即可
日志而已,没必要学那么详细,我们看重的是日志打印出的信息


STDOUT_LOGGING

还是上次的案例Mybatis - 概述与入门
就是一个User(id,name,pwd)表,对该表增删改查

在核心配置文件mybatis-config.xml中配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<configuration>
    
    <!--引入外部配置文件:优先使用外部文件-->
    <properties resource="db.properties"/>

    
    <settings>
        <!--标准的日志工厂实现-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    
    <!--给实体类型别名-->
    <typeAliases>
        <!--自动扫描包,实体类别名为类名大小写,如果有注解即为注解名-->
        <package name="com.learn.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED" >
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--每一个mapper.xml都需要在mybatis的核心配置文件注册-->
    <mappers>
        <!--将包内的映射器接口实现全部注册为映射器-->
        <package name="com.learn.dao"/>
    </mappers>
</configuration>

再去运行查询方法:

    @Test
    public void getUseList(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> users = mapper.getUserList();
        for (User user : users ){
            System.out.println(user);
        }
        sqlSession.close();
    }

会发现控制台多了很多信息
在这里插入图片描述

这些可以帮助我们更好的了解Mybatis的运作

解读一下上面的信息:

  1. 读取Mapper
  2. 打开、创建连接Connection
  3. 运行sql语句(控制台甚至打印出了sql及运行过程,这对我们的检测错误是很有帮助的,后面的动态sql的查错就需要显示sql运行)
  4. 输出结果
  5. 提交事务(select不需要)
  6. 关闭JDBC Connection

是不是就是我们JDBC的流程,Mybatis是封装了JDBC的

STDOUT_LOGGING 是标准日志输出,已经够用了,但是还可以对日志进行优化:比如对于info信息不打印等要求

就可以使用Log4j或者Log4j2(Log4j2是Log4j的升级版)


Log4J

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

Log4J是一种优秀的日志操作包

如果想用Log4j,需要先导包

Maven配置,或者直接导包(建议使用Maven管理工具,十分方便)

    <dependencies>
        <!--log4j配置-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

然后把setting改一下(全要大写,别瞎写)

    <settings>
        <!--标准的日志工厂实现-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>

但是可以发现,它把信息都放到一个文件里了,并没有显示
在这里插入图片描述

我们可以设置一个日志控制文件log4j.properties

对于输出到哪,可以根据需求选择

### 配置根 ###
log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE

### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
log4j.logger.org.apache=dubug
log4j.logger.java.sql.Connection=dubug
log4j.logger.java.sql.Statement=dubug
log4j.logger.java.sql.PreparedStatement=dubug
log4j.logger.java.sql.ResultSet=dubug

### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n

### 配置输出到文件 ###
log4j.appender.fileAppender = org.apache.log4j.FileAppender
log4j.appender.fileAppender.File = logs/log.log
log4j.appender.fileAppender.Append = true
log4j.appender.fileAppender.Threshold = DEBUG
log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 配置输出到文件,并且每天都创建一个文件 ###
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.File = logs/log.log
log4j.appender.dailyRollingFile.Append = true
log4j.appender.dailyRollingFile.Threshold = DEBUG
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 配置输出到文件,且大小到达指定尺寸的时候产生一个新的文件 ###
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.ROLLING_FILE.Threshold=ERROR 
log4j.appender.ROLLING_FILE.File=rolling.log 
log4j.appender.ROLLING_FILE.Append=true 
log4j.appender.ROLLING_FILE.MaxFileSize=10KB 
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

### 配置输出到邮件 ###
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@yeqiangwei.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@yeqiangwei.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

### 配置输出到数据库 ###
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

其实留下输出到控制台和文件就够了
在运行程序一次:
会多出一个log文件夹:error.log和log.log
在这里插入图片描述

控制台会显示debug信息(debug<info<warn<Error<Fatal)


日志对象

Log4J提供了一个日志对象,可以修改日志输出的样式

在Test类中定义:


public class myTest {
    //日志对象,参数为当前类的class
    private Logger logger = Logger.getLogger(myTest.class);

  
    @Test
    public void getUseList(){
      	//日志工厂实现
		logger.debug("Debug:进入了getUseList方法");
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> users = mapper.getUserList();
        for (User user : users ){
            System.out.println(user);
        }
        sqlSession.close();
    }

往debug信息上加上一行输出

在这里插入图片描述

当然,日志对象和一些日志文件的配置还有挺多细节的,这里就不深究了


总结

一切看自己的意愿,日志只是辅助我们的工具

说实话,我比较喜欢 STDOUT_LOGGING ,简单又好用

当然,如果系统复杂,需要筛选信息还是log4j好用

其他的日志工具其实也挺好用,看自己的选择

学海无涯苦作舟

都看到这了,点个赞呗(^_−)☆

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值