欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一篇文章带你学会 LoggerFactory.getLogger 的使用

程序员文章站 2024-03-23 08:31:16
...

本文是在 SpringBoot 中使用,建立时选择了 web 功能,所以不用额外导入slf4j-api 依赖

一、源码分析

public class Test {
	// 使用指定类初始化日志对象
    private static final Logger log = LoggerFactory.getLogger(Test.class);
}

LoggerFactory.getLogger可以在 IDEA 控制台打印日志,便于开发,一般加在最上面

进入 getLogger
一篇文章带你学会 LoggerFactory.getLogger 的使用
可以发现这里返回来了一个以 name 命名的静态绑定的实例

继续进入 getILoggerFactory() 查看具体的返回:
一篇文章带你学会 LoggerFactory.getLogger 的使用

 public static ILoggerFactory getILoggerFactory() {
        if (INITIALIZATION_STATE == 0) {
            Class var0 = LoggerFactory.class;
            synchronized(LoggerFactory.class) {
                if (INITIALIZATION_STATE == 0) {
                    INITIALIZATION_STATE = 1;
                    performInitialization();
                }
            }
        }

        switch(INITIALIZATION_STATE) {
        case 1:
            return SUBST_FACTORY;
        case 2:
            throw new IllegalStateException("org.slf4j.LoggerFactory in failed state. Original exception was thrown EARLIER. See also http://www.slf4j.org/codes.html#unsuccessfulInit");
        case 3:
            return StaticLoggerBinder.getSingleton().getLoggerFactory();
        case 4:
            return NOP_FALLBACK_FACTORY;
        default:
            throw new IllegalStateException("Unreachable code");
        }
    }

发现这里根据相应的参数返回相应的日志信息

二、示例演示

public class Test {
    private static final Logger log = LoggerFactory.getLogger(Test.class);

    public static void main(String[] args) {
        File file = new File("D:\\flv\\GAN.pdf");
        log.info("[文件名称] - [{}]", file.getName());
        log.info("[文件路径] - [{}]", file.getAbsolutePath());
        try {
            int i = 10/0;
        } catch (Exception e) {
            log.info(e.getMessage());
        }
    }
}

一篇文章带你学会 LoggerFactory.getLogger 的使用
slf4j 目前提供了 trace, debug, info, warn, error 5 种level
一篇文章带你学会 LoggerFactory.getLogger 的使用
注意
在打印日志的时候,不要使用字符串拼接,要习惯使用占位符

对于占位符的形式而言,只有在我们需要的时候才会提取字符串,这样就会避免创建string对象的时候消耗大量的资源

因为string对象是不可变的,所以会消耗大量的堆内存,一旦我们用了字符串拼接,就有大量的字符串占用机器的内存,但是当我们用占位符的时候,只有在用到的时候才会动态的创建