目录
一.日志的作用
日志有什么用?
如果你的项目不是很大,你会发现其实没什么重要的,但是如果你的项目很复杂,没有日志,你会感觉自闭的
⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?不可能,完全不可能的啊!
日志常见的作用:
- 发现问题、定位问题
- 可记录用户的登记日志
- 记录系统的操作时间
- 记录程序的执行时间
二.日志如何使用
在正常SpringBoot运行之后,就会有默认的日志输出!
因此我们可以发现,3个问题:
- SpringBoot内置了日志框架。
- 默认情况下,日志并非是开发者定义和打印。
- 日志默认是打印在控制台上,而控制台的日志是不能保存的,那怎么保存呢?
2.1自定义日志
日志,获取日志对象,通过相关语法打印日志!
日志工厂:LoggerFactory 该类,是将每个类的类型传递进去,才能知道日志的归属类!
一般认为一个类中有一个日志对象即可,所以我们在定义日志对象时可以将其定义为静态的私有属性
java
// 1.得到⽇志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class
);
SLF4J(Simple Logging Facade for Java)框架。SLF4J 是一个为各种日志记录器提供统一抽象的框架,它本身并不提供日志记录功能,而是通过与不同的日志记录器实现(如 Logback、Log4j2)进行绑定来实现日志记录功能。 但是springBoot里内置此框架。
但是由于Logger对象是属于org.slf4j包下的,因此我们需要导包。
打印自定义日志:
要打印日志消息,可以使用日志记录器的不同级别的方法,例如:
-
跟踪级别(Trace) :记录最详细的日志信息,通常用于调试。可以使用
logger.trace("message")
方法来记录跟踪级别的日志。 -
调试级别(Debug) :记录调试信息,通常用于诊断问题。可以使用
logger.debug("message")
方法来记录调试级别的日志。 -
信息级别(Info) :记录一般信息,通常用于显示程序的运行状态。可以使用
logger.info("message")
方法来记录信息级别的日志。 -
警告级别(Warn) :记录警告信息,表示潜在的问题,但不会影响程序的正常运行。可以使用
logger.warn("message")
方法来记录警告级别的日志。 -
错误级别(Error) :记录错误信息,表示程序出现了错误,但不会导致程序崩溃。可以使用
logger.error("message")
方法来记录错误级别的日志。 -
严重错误级别(Fatal):记录严重错误信息,表示程序出现了严重问题,可能导致程序崩溃。不是所有的日志记录器都支持这个级别。
我们先使用Info信息级别的展示一下:
2.2日志格式
日志一共包含了6个消息:
- 打印时间
- 打印级别
- 线程名称
- 线程ID
- 执行类名
- 日志消息
三.日志级别
日志级别有什么用呢?
- 通过在应用程序中使用不同级别的日志记录,开发人员可以更好地了解应用程序的运行情况,快速诊断问题,并及时采取适当的措施来解决。在生产环境中,合理设置日志级别可以降低日志记录的数量,提高系统性能,并帮助管理员快速定位和解决问题。
3.1级别的分类和使用
日志级别分类:
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息(默认⽇志级别);
- warn:警告,不影响使⽤,但需要注意的问题;
- error:错误信息,级别较⾼的错误⽇志信息;
- fatal:致命的,因为代码异常导致程序退出执⾏的事件
等级从上往下,如果设置了warn级别,则无法收到info以上的信息了。
在SpringBoot里日志级别设置方法:
java
logging:
level:
root: error
设置之后,你会发现启动项目之后,无论是默认的日志输出还是,日志记录器的日志,不会再有error以下的级别了!
3.2日志持久化
在开发项目时,我们的日志不应该一直显示在控制台吧,应该将日志保存下来,而需要持久化,两种方式:
- 我们需要在配置文件中指定日志的存储目录,
- 指定日志保存文件名
如此SpringBoot会将日志写入到相应的目录或者文件!
1.配置文件:
java
# 设置⽇志⽂件的⽬录
logging:
file:
path: D:\\baidu\\home
启动项目之后,会自动生成一个名为Spring.log文件
2.配置日志文件的文件名:
java
#日志文件文件名的设置
logging:
file:
name: D:\\baidu\\home\\springboot.log
该方法也可以自动生成所定义的日志输出文件!
四.使用lombok进行日志输出
如果想要获取日志,我们需要使用LoggerFactory类的getLogger(xxx.class)方法,很麻烦,所以为了便利,我们可以采取lombok进行简单输出。
需要的依赖和注解:
- 添加 lombok 框架支持
- 使用@slf4j注解输出日志
第一步:添加lombok依赖
在SpringBook项目里添加lombok依赖,如果存在则省略这步!
java
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
第二步 输出日志:
java
@RestController //RestController = Controller + ResponseBody
@Slf4j //给当前类中添加一个叫做 log 的日志对象
public class LogController {
@RequestMapping("/log/sayHi")
public String sayHi() {
log.info("aaaa");
log.error("bbbb");
return "log sayHi";
}
}
相当于使用@Slf4j 代替 LoggerFactory.getLogger 在该类中添加了一个log对象。
额外补充:如果添加了Lombok依赖,我们可以使用@Data注解,在类上使用,该类的所有元素就都有了get和set方法
这个@Data很牛逼的,相当于很多注解之和!
@Data
注解相当于以下几个注解的组合:
@ToString
: 自动生成toString()
方法,用于打印对象的字符串表示形式。@EqualsAndHashCode
: 自动生成equals()
和hashCode()
方法,用于对象的比较和哈希计算。@Getter
: 自动生成所有字段的getter
方法。@Setter
: 自动生成所有字段的setter
方法。@RequiredArgsConstructor
: 生成一个包含所有必需字段的构造函数。