zl程序教程

您现在的位置是:首页 >  其他

当前栏目

面试官问我日志是什么?

2023-09-11 14:20:20 时间

1. 日志工厂

如果一个数据库操作出现了异常,我们需要排错,日志就是最好的助手。

曾经:sout、debug

现在使用:日志工厂

在这里插入图片描述

  • SLF4J
  • LOG4J 【掌握】
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING 【掌握】
  • NO_LOGGING

在mybatis中具体使用哪一个日志实现,在设置中设定

STDOUT_LOGGING 标准日志输出

  • 测试:

    在mybatis核心配置文件中进行配置

    空格也不要有

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

    在这里插入图片描述

    在这里插入图片描述

2. LOG4J

什么是log4j?

  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件
  • 也可以控制每一条日志的输出格式
  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程
  • 以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

2.1 先导入LOG4J的包

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

2.2 log4j.properties

#将等级为DEBUG的日志信息输出到console和file这两个目的地,
log4j.rootLogger=DEBUG,console,file

# 控制台(console)
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

#文件出书的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ./log/hxl.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.PrepareStatement = DEBUG

2.3 配置log4j为日志的实现

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

2.4 log4j的使用

直接测试运行。可以和前面的测试对比以下。

在这里插入图片描述

3. 简单使用

3.1 导包

我们在要使用Log4j的类中,导入import org.apache.log4j.Logger;这个包千万别导错

3.2 日志对象

参数为当前类的class

static Logger logger = Logger.getLogger(UserMapperTest.class);

3.3 日志级别

logger.info("info:进入了testLog4j方法");
logger.debug("debug:进入了testLog4j");
logger.error("error:进入了testLog4j");

3.4 测试

import com.hxl.pojo.User;
import com.hxl.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Test;

public class UserMapperTest {
    static Logger logger = Logger.getLogger(UserMapperTest.class);
    @Test
    public void testLog4j(){
        logger.info("info:进入了testLog4j方法");
        logger.debug("debug:进入了testLog4j");
        logger.error("error:进入了testLog4j");
    }
}

在这里插入图片描述

我们有了日志对象我们就可以在测试类或者其他地方使用

@Test
public void getUserById(){
    //获得SqlSession对象
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    logger.info("进入了getUserById方法");
    //我们获得到对象,要拿到sql要么去dao拿要么去mapper中拿,但其实都一样
    //下面我们get到他的接口,返回接口类型
    //getMapper 执行sql
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User user = userMapper.getUserById(1);
    //方式2:直接通过里面的select,根据返回值的来进行。不推荐使用
    //<User> userList = sqlSession.selectList("com.hxl.dao.UserDao.getUserList");
    System.out.println(user);

    //关闭SQLSession
    sqlSession.close();
}