1.日志有什么用?
日志是程序的重要组成部分,如果程序报错,我们可以通过日志发现和定位问题,同样日志也可以实现以下的功能:
- 记录用户登录日志,方便分析用户是否是正常登录还是恶意破解用户;
- 记录系统的操作日志,方便数据恢复和定位操作人;
- 记录程序的执行时间,方便为以后优化程序提供数据支持。
2.日志怎么用?
Spring Boot项目在启动的时候默认就会有日志的输出,如图所示
通过上面的图,我们发现打印日志的格式:日志打印时间、日志打印级别、线程ID、线程名称、执行类和日志信息。
3.自定义打印日志
开发者自定义打印日志的实现步骤如下:
- 在程序中获取日志的对象
- 使用日志对象的相关语法输出要打印的内容
3.1在程序中得到日志对象
@RestController
@RequestMapping("/logger")
public class LoggerController {//1.得到日志的对象private static Logger logger = LoggerFactory.getLogger(LoggerController.class);}
日志工厂需要我们将每个类的类型传递过去,这样我们才知道日志归属类,才能更方便、更直观的定位到问题的类。
注意:Logger对象是属于 org.slf4j 包下的,不要导错包
3.2使用日志对象打印日志
日志对象的打印方式有很多,如下代码所示:
//2.打印日志@RequestMapping("/log")public void getLog() {String s = "这是一个日志";logger.trace("trace -> " + s);logger.debug("debug -> " + s);logger.info("info -> " + s);logger.warn("warn -> " + s);logger.error("error -> " + s);}
注意我们需要使用URL进行触发才能打印日志。
4.日志的级别
4.1日志级别的作用
- 日志级别可以帮程序员筛选出重要的信息,比如设置日志级别为 error,那么我们就只看程序报错的日志了,对于普通的调试日志和业务日志都可以忽略了
- 日志的级别可以控制在不同的环境下,一个程序是否需要打印日志,比如在开发环境我们需要很详细的日志,而生产环境为了保证性能和安全性就会输入少量的日志,而通过日志的级别就可以输出这样的需求。
4.2日志级别的分类
- trace:微量,少许的意思,级别最低;
- debug:需要调试的时候的关键信息的打印;
- info:普通的打印信息(默认日志级别);
- warn:警告:不影响使用,但需要注意的问题;
- error:错误信息,级别较高的错误日志;
- fatal:致命的,因为代码异常导致程序退出执行的时间,只能由程序自身打印,程序员无法打印
【日志级别的设置】
日志级别设置只需要在配置文件设置"logging.lever"配置项即可
logging:level:root: errorcom.example.demo.controller: info
root为所有目录都设置成error级别,com.example.controller表示单独这个包下面的级别
5.日志持久化
想要将日志进行持久化,我们需要在配置文件中指定日志的存储目录或者是指定日志保存文件名之后,Spring Boot就会将控制台的日志写到相应的目录下。
logging:level:root: errorcom.example.demo.controller: info
# 设置日志保存的目录和名字file:path: C:\\Users\\lenovo\Desktopname: C:\\Users\\lenovo\\Desktop\\spring-1024.log
6.更简单的日志输出
每次都是用LoggerFactory.getLogger(xxx.class)很是繁琐,并且在使用的时候每个类都要添加一遍,我们可以使用更简单的方法:
- 首先我们添加lombok框架的支持
- 使用@slf4j注解输出日志
6.1输出日志
@RestController
@RequestMapping("/logger")
@Slf4j
public class LoggerController {// //1.得到日志的对象
// private static Logger logger = LoggerFactory.getLogger(LoggerController.class);//2.打印日志@RequestMapping("/log")public void getLog() {String s = "这是一个日志";log.error("error -> " + s);
// logger.trace("trace -> " + s);
// logger.debug("debug -> " + s);
// logger.info("info -> " + s);
// logger.warn("warn -> " + s);
// logger.error("error -> " + s);}}
6.2lombok原理解释
lombok能够打印日志的密码就在targer目录中,target为项目最终执行的代码,我们查看target目录:
我们发下按@Slf4j被替换成了这行代码。
Lombok的作用如下图所示:
在编译阶段把注释换成响应的代码并进行编译。
6.3Lombok更过注解说明
注解 | 作用 |
---|---|
@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的日志 |
7.总结
日志用于快速的发现和定位问题,Spring Boot内置了日志的框架,默认情况下使用的日志级别为info,包含6个日志级别:
- trace
- debug
- info
- warn
- error
- fatal
日志的级别越高,日志的信息越少,同时我们可以配置不同文件打印日志的级别,并将日志保存下来。