一、概念:日志记录器
比如我们在代码里面通过info对象来记录日志,info在代码里面是一个对象,我们管这个叫【日志记录器】
info.log(xxx);
或者这种:
public static final Logger LOGGER = LoggerFactory.getLogger(xxx.class);
LOGGER.info(.....);
//LOGGER也叫日志记录器对象
二、获取日志记录器
LoggerFactory.getLogger的作用是获取,日志记录器
比如在代码中我们会看到这两种获取方式
private static final Logger log = LoggerFactory.getLogger(DigestLogDTO.class);
public static final Logger LOGGER = LoggerFactory.getLogger("digestLog");
1、第一种是通过类.class,
然后在转成className的方式获取,比如当前类在com.payermax.infra.ionia.log.digest.core.dto下,那就或获取Name=
com.payermax.infra.ionia.log.digest.core.dto.DigestLogDTO的日志记录器
源码中:Logger logger = getLogger(clazz.getName());
2、第二种就直接通过获取
【日志记录器Name】等于 "digestLog"的日志记录器,所以我们在Logback.xml或者log4j2.xml的里面就要配置,这两种日志记录器。
记录器1
<logger name="com.payermax.infra.ionia.log.digest.core.dto.DigestLogDTO" level="warn"/>
记录器2
<logger name="digestLog" level="INFO">
</logger>
三、根日志记录器
<root level="info">
....
</root>
在Log4j2 中,根日志记录器是整个日志系统的顶级日志记录器,所有未被其他特定日志记录器覆盖的日志事件都会被发送到根日志记录器。
四、日志记录器为包路径时
例如,假设log4j2.xml中配置了以下两个logger:
<logger name="com.example" level="DEBUG"/>
<logger name="com.example.subpackage" level="INFO"/>
如果某个类位于com.example.subpackage包下,log4j2会选择第二个logger配置,因为它更具体,与该类的包名更匹配。
如果没有与类所在的包名完全匹配的logger配置,log4j2将会选择默认的根logger配置。也就是root标签配置的日志。
五、@Slf4j
@Slf4j注解,为什么可以直接使用log对象来记录日志
@Slf4j 是 Lombok 提供的注解之一,它可以在编译时自动生成日志相关的代码,包括私有的 log 成员变量,以及在类中使用该变量记录日志的方法。这样一来,你就可以直接使用 log 对象来记录日志,而无需手动创建Logger对象。
这种方式简化了代码,使得你只需专注于日志的使用,而无需关心日志对象的初始化和管理。 Lombok会在编译时自动处理这些细节。
@Slf4j拿的是哪个日志记录器对象
@Slf4j 注解使用的是Slf4j(Simple Logging Facade for Java)框架。在运行时,它会绑定到你所使用的具体的日志实现,例如 Logback、Log4j2 或者 Java Util Logging。