4-1.代码中使用日志工具记录日志
约 1368 字大约 5 分钟
2025-06-23
本节主要讲解如何在 Spring Boot 项目中使用日志工具来记录日志,方便开发调试和运维监控。
1. 添加日志记录操作
首先,在需要记录日志的类中,需要获取一个 Logger
对象,然后使用该对象调用不同的方法来记录不同级别的日志信息。
@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
private static final Logger log = LoggerFactory.getLogger(BookController.class);
@GetMapping
public String getById(){
log.debug("debug...");
log.info("info...");
log.warn("warn...");
log.error("error...");
return "springboot is running...2";
}
}
代码解释:
private static final Logger log = LoggerFactory.getLogger(BookController.class);
:这行代码是获取Logger
对象的关键。LoggerFactory
是一个日志工厂类,getLogger(BookController.class)
方法会根据传入的类名创建一个Logger
实例,BookController.class
的目的是为了在日志中能够区分出是哪个类产生的日志信息。private static final
表明log
对象是BookController
类私有的、静态的、不可变的,这意味着每个BookController
类的实例共享同一个Logger
对象,且该对象一旦创建后就不能被修改。log.debug("debug...");
、log.info("info...");
、log.warn("warn...");
、log.error("error...");
:这些代码是实际记录日志的操作。log
对象提供了不同级别的日志记录方法,如debug()
、info()
、warn()
和error()
。开发者可以根据实际情况选择合适的日志级别来记录信息。例如,debug()
用于记录调试信息,info()
用于记录一般信息,warn()
用于记录警告信息,error()
用于记录错误信息。
上述代码展示了如何在 BookController
类中使用 Logger
对象记录不同级别的日志信息。在实际开发中,可以根据需要在不同的类和方法中添加日志记录操作,以便更好地了解系统的运行状态和排查问题。
2. 设置日志输出级别
日志级别用于控制哪些级别的日志信息会被记录下来。通过设置合适的日志级别,可以避免输出过多的无用信息,提高日志的可读性。常见的日志级别从低到高依次为:
- TRACE:运行堆栈信息,使用率低
- DEBUG:程序员调试代码使用
- INFO:记录运维过程数据
- WARN:记录运维过程报警数据
- ERROR:记录错误堆栈信息
- FATAL:灾难信息,合并计入 ERROR
通常情况下,开发时使用 DEBUG 级别,上线后使用 INFO 级别,运维信息记录使用 WARN 级别。
在 application.yml
中设置日志级别:
简单粗暴的方式:
# 开启debug模式,输出调试信息,常用于检查系统运行状况 debug: true
细粒度的控制方式:
logging: level: root: debug
logging.level.root: debug
表示设置根 logger 的级别为 debug
。根 logger 是所有 logger 的父 logger,因此这个设置会影响到整个应用程序的日志级别。这意味着,只有级别为 debug
、info
、warn
、error
和 fatal
的日志信息才会被输出。
3. 设置日志组
日志组允许将多个包组合在一起,统一设置日志级别。
logging:
# 设置日志组
group:
# 自定义组名,设置当前组中所包含的包
ebank: com.itheima.controller
level:
root: warn
# 为对应组设置日志级别
ebank: debug
# 为对包设置日志级别
com.itheima.controller: debug
这段配置展示了如何在 application.yml
文件中配置日志组和日志级别。
logging.group.ebank: com.itheima.controller
:这行代码定义了一个名为ebank
的日志组,并将com.itheima.controller
包添加到了该组中。这意味着,所有位于com.itheima.controller
包中的类的日志记录器都将属于ebank
组。logging.level.root: warn
:这行代码设置了根日志记录器的级别为warn
。这意味着,如果没有为特定的日志记录器或日志组指定级别,那么它们将默认使用warn
级别。logging.level.ebank: debug
:这行代码设置了ebank
日志组的级别为debug
。由于com.itheima.controller
包属于ebank
组,因此该包中的所有类的日志记录器都将使用debug
级别,覆盖了根日志记录器的warn
级别。logging.level.com.itheima.controller: debug
:这行代码直接设置了com.itheima.controller
包的级别为debug
。与上一行代码的效果相同,都是将该包中的所有类的日志记录器级别设置为debug
。
总的来说,这段配置的目的是将 com.itheima.controller
包中的所有类的日志记录器级别设置为 debug
,同时保持其他包的日志记录器级别为默认的 warn
。
4. 优化日志对象创建代码
在上述介绍的传统 Java 代码中,每个类都需要手动创建一个 Logger
对象,例如:
@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
private static final Logger log = LoggerFactory.getLogger(BookController.class);
}
这段代码需要在每个类中都重复编写,显得比较繁琐。
为了解决这个问题,可以使用 Lombok 提供的 @Slf4j
注解来自动生成 Logger
对象。使用 @Slf4j
注解后,上面的代码可以简化为:
@Slf4j
@RestController
@RequestMapping("/books")
public class BookController extends BaseClass{
// 无需手动创建 Logger 对象
}
代码解释:
@Slf4j
:这是一个 Lombok 提供的注解,用于自动生成Logger
对象。当类上添加了@Slf4j
注解后,Lombok 会在编译时自动生成一个名为log
的Logger
对象,开发者可以直接在类中使用该对象来记录日志信息,无需手动创建。日志对象名为log
。