写一个简单的类
package com.example.demo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("test")
@RestController
@Slf4j
public class TTController {
@RequestMapping("/log")
public String getT() {
log.info("log");
return "success";
}
}
引入注解@Slf4j编译之后查看class文件反编译,反编译文件如下:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping({"test"})
@RestController
public class TTController {
private static final Logger log = LoggerFactory.getLogger(TTController.class);
public TTController() {
}
@RequestMapping({"/log"})
public String getT() {
log.info("log");
return "success";
}
}
发现lombok 使用APT技术已经生成了private static final Logger log = LoggerFactory.getLogger(TTController.class);

查看info的实现的时候发现有多个实现点击F7 进入发现进入的是Logger实现
public final class Logger implements org.slf4j.Logger, LocationAwareLogger, AppenderAttachable<ILoggingEvent>, Serializable {
实现逻辑如下:
深入理解log.info:实现逻辑与日志等级

本文探讨了log.info的实现原理,通过分析源码发现日志级别使用int标志,如OFF, ERROR, WARN, INFO, DEBUG, TRACE和ALL。日志输出的判断基于这些级别的比较。在日志框架中,一个名为""旋涡过滤器数组""的私有列表起到关键作用,但其初始化过程仍有待进一步探索。目前来看,日志是否打印取决于用户设置的日志级别和系统启动时的日志级别。最后,作者提出疑问关于这种复杂实现的原因,并认为深入研究源码是理解其奥秘的关键。"
135974202,19960945,C# ASP.NET旅游客服系统设计与实现 - 结合SQL Server与多模块管理,"['C#编程', 'ASP.NET框架', '数据库管理', '旅游行业', '系统开发', '毕业设计']
最低0.47元/天 解锁文章
677

被折叠的 条评论
为什么被折叠?



