日志框架常见的两个概念:日志门面(Logging Facade)和日志实现(Logging Implementation)
日志门面是一个抽象层,它定义了一组统一的日志接口,用于在应用程序中记录日志。它的作用是将应用程序代码与具体的日志实现解耦,使得应用程序代码不直接依赖于某个具体的日志框架。通过使用日志门面,可以在运行时灵活地切换不同的日志实现,而无需修改应用程序的代码。
日志实现是指具体的日志框架的实现,它实现了日志门面所定义的接口,并提供了实际的日志记录功能。不同的日志实现提供了不同的配置选项、功能和性能特性。开发人员可以根据项目需求选择合适的日志实现,并使用相应的配置进行日志记录。
要使用日志门面,需要在应用程序中引入相应的日志门面库(SLF4J和Commons Logging),并通过配置文件或代码设置具体的日志实现(Log4j和Logback)。这样,应用程序就可以通过调用日志门面的接口来记录日志,而具体的日志记录将由所配置的日志实现来处理。这种分离的设计允许开发人员更方便地切换和管理日志框架,并提供了更大的灵活性和扩展性。
trace
:级别最低,意为微量少许debug
:需要调试时打印的信息info
:普通打印信息(默认)warn
:警告信息error
:错误信息,级别较高fatal
:致命的,代码异常导致退出,系统级别的日志级别,无法手动控制以上日志级别由上往下依次增强,而日志级别越高,控制台打印出的日志信息就越少,但打印出的日志信息越重要
项目设置的日志级别默认为?INFO
,也就是控制台只打印收到的INFO
,WARN
,ERROR
,FATAL
级别的日志,而TRACE
和DEBUG
级别的日志不进行打印。
日志级别配置只需要在配置文件中设置?1ogging.leve1
?配置项就行。
项目重启后就可以看到debug日志
在程序中获取日志对象需要使用日志工厂LoggerFactory
// 这里的Logger类输入org.slf4j包下的,不可导错包
private Logger logger = LoggerFactory.getLogger(TestController.class);
public void someMethod() {
log.trace("trace 级别");
log.debug("debug 级别");
log.info("info 级别");
log.warn("warn 级别");
log.error("error 级别");
}
# 日志保存名称
logging:
file:
name: D:\\home\\springboot.log
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
如果想向创建项目那样引入依赖,又是社区版 IDEA ,可以先安装一个插?EditStarters
,然后在 pom.xml 文件中右键选择 Generate,选择 Edit Starters,选择 OK,然后就是熟悉的添加依赖的界面
@Controller
@ResponseBody
@Slf4j
public class UserController {
@RequestMapping("/login")
public void func1() {
log.trace("trace等级日志");
log.debug("debug等级日志");
log.info("info等级日志");
log.warn("warn等级日志");
log.error("error等级日志");
}
}
注意:如果使用 @Slf4j 注解的话,需要使用 log 对象调用各种方法,这是 lomlok提供的对象名
通过加一个注解就能使得获取日志对象操作变得简单,lombok 究竟是如何做到这一点的能,注解的背后又是什么呢
通过查看目录 target 答案就被揭晓,我们知道 target 实际上就是编译好的字节码文件目录,JVM 最后真正执行的就是字节码文件
这是编译好的字节码文件,可以发现 @Slf4j注解不见了,代码里出现了老版获取日志文件的代码
@Controller
@ResponseBody
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
public UserController() {
}
@RequestMapping({"/login"})
public void func1() {
log.trace("trace等级日志");
log.debug("debug等级日志");
log.info("info等级日志");
log.warn("warn等级日志");
log.error("error等级日志");
}
}
.class
为后缀的字节码文件,将其放到JVM虚拟机上去运行就可以让程序跑起来了lombok
框架支持后,它就会与普通的java
程序一同进行编译,然后生成.class
为后缀的字节码文件注解 | 作用 |
---|---|
@Getter | ?动添加 getter ?法 |
@Setter | ?动添加 setter ?法 |
@ToString | ?动添加 toString?法 |
@EqualsAndHashCode | ?动添加 equals 和 hashCode ?法 |
@NoArgsConstructor | ?动添加?参构造?法 |
@AllArgsConstructor | ?动添加全属性构造?法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为 null |
@RequiredArgsConstructor | ?动添加必需属性的构造?法,final + @NonNull 的属性为必需 |
注解 | 作用 |
---|---|
@Data | @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor |
注解 | 作用 |
---|---|
@Slf4j | 添加?个名为 log 的?志,使? slf4j |