日志的主要作用是记录系统的运行状态、事件和错误信息等。具体来说,日志可以用于以下几个方面:
故障排除:当系统出现故障或错误时,日志可以帮助开发人员定位问题的具体原因和位置,从而更快地修复系统。
监控和分析:通过分析日志文件,可以了解系统的运行情况,例如系统的负载、性能瓶颈、用户行为等信息,从而帮助进行系统监控和性能优化。
安全审计:日志可以记录用户的操作行为和系统的安全事件,用于追踪和审计系统安全问题,例如入侵检测、恶意访问等。
系统运维:日志可以记录系统的运行过程、维护操作和配置变更等信息,用于管理和维护系统,保证系统的稳定性和可用性。
总的来说,日志是系统运维和开发过程中的重要工具,通过收集和分析日志可以提高系统的稳定性、性能和安全性。
Spring Boot 项目在启动的时候默认就有日志输出
System.out.print 打印日志的问题:
无时间(可以自己加)
无日志级别
无打印日志的执行位置(可以自己加)
无法持久化
在程序中获取日志对象需要使用日志工厂 LoggerFactory
// 1.得到日志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
Logger 对象是属于 org.slf4j 包下的,不要导错包
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;
/**
* @projectName: Demo
* @package: com.example.demo.controller
* @className: LogController
* @author: 王嘉辉
* @description:
* @date: 2023/12/13 16:49
* @version: 1.0
*/
@RestController
public class LogController {
//1.得到日志对象
private static Logger log = LoggerFactory.getLogger(LogController.class);
@RequestMapping("/log")
public void log() {
String msg = "日志学习";
log.trace("trace -> " + msg);
log.debug("debug -> " + msg);
log.info("info -> " + msg);
log.warn("warn -> " + msg);
log.error("error -> " + msg);
}
}
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认日志级别);
warn:警告,不影响使用,但需要注意的问题;
error:错误信息,级别较高的错误日志信息;
fatal:致命的,因为代码异常导致程序退出执行的事件。
越往上接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的日志了。
日志级别的作用:过滤信息,将业务不需要的日志屏蔽掉
为什么 Spring Boot 可以打印日志? 并设置日志级别?
因为 Spring Boot 内置了两个日志框架 SLF4J + LogBack
SLF4J 让开发者使用和调用的框架
LogBack最底层实现日志相关操作的框架
给某个文件夹单独设置日志级别
以上的日志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。
想要将日志进行持久化,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名之后,Spring Boot 就会将控制台的日志写到相应的目录或文件下了。
# 设置?志?件的?录
logging:
file:
path: D:\\study\\rizhi
# 设置?志?件的?件名
logging:
file:
name: D:\\study\\rizhi\\spring.log
每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加?遍,也很麻烦,这里讲一种更好用的日志输出方式,使用 lombok 来更简单的输出。
添加 lombok 框架支持
使用 @slf4j 注解输出日志。
前置工作(重要):无论什么类型的idea都必须先安装一个 lombok 插件。
在项目中添加 lombok 的依赖
package com.example.demo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @projectName: Demo
* @package: com.example.demo.controller
* @className: LogController2
* @author: 王嘉辉
* @description:
* @date: 2023/12/13 20:39
* @version: 1.0
*/
@RestController
@Slf4j //当前的类中就可以直接使用 log 对象了 @Slf4j 产生一个 log 对象,直接使用
public class LogController2 {
@RequestMapping("/log2")
public void log2() {
log.trace("trace log2");
log.debug("debug log2");
log.info("info log2");
log.warn("warn log2");
log.error("error log2");
}
}