一、概述
日志是程序的重要组成部分,程序报错了,我们可以通过查看日志信息排除和定位问题。
二、日志格式
在启动 SpringBoot 项目时,控制台中默认会打印一些日志,下面我们截取一段日志信息,分析一下日志的格式:
为什么 SpringBoot 可以设置并打印日志?
因为其内部内置了两个日志框架: SLF4J
(让开发者使用和调用的框架) 和 logback
(最底层实现日志相关操作的框架)
三、日志级别
日志的级别分为:
trace
:微量,少许的意思,级别最低;debug
:需要调试时候的关键信息打印;info
:普通的打印信息(默认日志级别);warn
:警告,不影响使用,但需要注意的问题;error
:错误信息,级别较高的错误日志信息;fatal
:致命的,因为代码异常导致程序退出执行的事件。(只有系统能输出)
1、日志级别的作用?
日志级别可以帮我们筛选出重要的信息,将业务不需要的日志屏蔽掉。例如日志级别设置为 error
时,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了。
2、如何设置日志级别?
只需要在配置文件进行简单配置即可。
例如设置根路径的日志级别为 error:
# 在 properties 文件中设置日志级别为 error logging.level.root=error
给 com.example.demo.model 目录下的类设置日志级别:
# 在 properties 文件中设置日志级别为 error logging.level.com.example.demo.model=error
四、自定义日志打印
自定义日志打印主要分为两步:
- 在程序中得到日志对象。
- 使用日志对象提供的打印方法输出要打印的内容。
方式一: Logger
对象是属于 org.slf4j 包下的,我们使用日志工厂 LoggerFactory
来获取到日志对象:
private static Logger logger = LoggerFactory.getLogger(类对象);
注: 这里 LoggerFactory.getLogger() 方法中的参数是用来指定日志记录器(Logger)的名称的。通常情况下,建议使用当前类的 Class 对象作为参数,以便在日志输出时能够正确标识出日志信息所属的类。
@Controller @ResponseBody public class LogController { private static Logger logger = LoggerFactory.getLogger(LogController.class); @RequestMapping("/log") public void log() { logger.trace("trace 级别的日志信息"); logger.debug("debug 级别的日志信息"); logger.info("info 级别的日志信息"); logger.warn("warn 级别的日志信息"); logger.error("error 级别的日志信息"); } }
方式二: 使用 lombok
@Controller @ResponseBody @Slf4j public class LogController { @RequestMapping("/log") public void log() { log.trace("trace 级别的日志信息"); log.debug("debug 级别的日志信息"); log.info("info 级别的日志信息"); log.warn("warn 级别的日志信息"); log.error("error 级别的日志信息"); } }
注: 使用 @Slf4j
注解会在当前类下添加一个名为 log
的日志对象。
注: 因为默认日志级别为 info
,因此仅输出级别大于等于 info 级别的日志。
五、日志持久化
以上的日志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题后进行追随。要将日志进行持久化,只需要在配置文件中指定日志的存储目录Spring Boot 就会将控制台的日志写到相应的目录下。
例如设置日志的存储的相对目录为 log:
# 设置日志的存储的相对目录为 ./log logging.file.path=./log