努力经营当下,直至未来明朗!
文章目录
- 一、日志有什么用
- 二、日志怎么用
- 三、 自定义日志打印
- 四、 日志级别
- 五、日志持久化
- 六、更简单的日志输出——lombok
- 小结
普通小孩也要热爱生活!
一、日志有什么用
- 日志是解决问题最直观、最有效的方法。
- ⽇志对于我们来说,最主要的⽤途就是排除和定位问题。
- 除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:
① 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
② 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
③ 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。
以上这些都是⽇志提供的⾮常实⽤的功能。
二、日志怎么用
- Spring Boot运行就有日志文件,默认是输出到控制台的sout。
- Spring Boot日志能够输出,说明Spring Boot是内置了日志框架的。
- 日志默认是输出到控制台上,不能持久化保存。
三、 自定义日志打印
-
Spring Boot 自定义日志的打印:
1)在一个类中先获取到打印日志对象(日志框架提供日志对象,而日志框架已经默认集成到Spring Boot中了)
2)使用日志对象提供的方法实现日志的打印。 -
自定义日志打印
1)首先创建一个Spring Boot项目(创建方式见:Spring Boot项目创建)
2)新建类(与启动类同级或其子目录下),加上五大类注解和非静态页面@ResponseBody注解
3)获取日志对象:Logger是从org.slf4j
中获取的,其中LoggerFactory.getLogger(参数:类对象)
4)写一个方法,使用日志提供的打印方法来打印日志;并给该方法加上路由@RequestMapping(“/xxx”)
[补充]
log.日志级别
- trace(); // 微量级别
- debug(); // 调试阶段打印日志
- info(); // 输出普通日志信息
- warn(); // 警告
- error(); // 错误
因为 Spring Boot 中内置了⽇志框架 slf4j,所以咱们可以直接在程序中调⽤ slf4j 来输出⽇志
-
日志打印输出:
为什么只有三个输出?
理由:info是默认的级别。只会输出大于等于当前级别的信息。 -
日志格式说明:
-
常见日志框架说明(简单看看就行):
四、 日志级别
-
日志级别有什么用?
① ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。
② ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。 -
日志级别的分类:
1)trace:微量,少许的日志;级别最低。
2)debug:调试的时候打印的日志。
3)info:普通日志;是Spring Boot 默认 的日志级别。
4)error:错误日志;级别较高。
5)fatal:致命的日志,因为代码异常导致程序退出执行。 【fatal是系统输出的日志,不能自定义打印!】
fatal不能被自定义打印的,其余全部是可以进行打印的
-
日志级别的顺序(主流说法):只能看到该级别以及往上级别的信息。
-
日志级别的设置:在配置文件中进行设置
⽇志级别设置只需要在配置⽂件中设置“logging.level
”配置项即可。
1)设置 全局(root) 的日志级别
2)设置某个/局部 文件夹的日志级别
注意:该文件夹的目录是从蓝色的java文件夹下开始计算的
3)存在全局日志和局部日志级别同时设置时,此时访问局部日志的时候就是使用局部日志级别。也就是说:局部日志级别优先于全局日志级别。
五、日志持久化
-
日志持久化就是将日志信息永久保存到磁盘上的某个位置。
-
日志持久化实现手段:
1)在配置文件中设置日志的保存路径(logging.file.path=到文件夹即可)
,当设置了保存路径之后,日志就会自动地进行持久化。
2)在配置文件中设置日志保存的名称logging.file.name=
,日志会自动进行持久化。 -
具体实现日志持久化:
1)在配置文件中设置日志的保存路径(logging.file.path=到文件夹即可):
如图,如果说路径正确的情况下并没有在对应位置生成日志,此时可能是:Spring Boot会认为 \字母 是一个特殊的字符而不是目录,此时日志持久化失败。
解决方法:
① 此时,修改路径中的\为 / 重新进行持久化:(推荐使用该方式)
② 将 \进行转义操作:
2)在配置文件中设置日志保存的名称 [logging.file.name=
指定全路径or相对路径,一般是指定全路径
,相对路径找不到]
-
持久化之后,每次重启之后都不会覆盖之前的内容,而是直接进行追加。
-
日志默认大小是10MB,当日志大于了10MB之后就会默认在文件名后面加上1、2、…序号进行分割。
-
如果想要自己设置文件大小并进行分割操作,在配置文件中进行设置:(了解就行)
[此时示例是在application.yml配置文件中进行设置]
- 日志格式也是可以进行格式化的:
logging: .
去查看(.properties中)
六、更简单的日志输出——lombok
- 准备工作:添加lombok到当前项目
1)在项目之前就添加(也就是创建项目的时候就选上了lombok)
2)在原有的项目基础上进行添加
首先安装插件plugins:EditStarters -> 在pom.xml中depencies -> 右键 -> generate -> Edit Starters -> 链接地址默认SpringBoot官网(不用修改) -> search lombok -> 添加 -> ok
- 在引入lombok依赖成功之后,就可以使用 @Slf4j 注解
@Slf4j 注解替代了之前通过LoggerFactory.getLogger获取日志对象的操作,默认生成的是log对象
(注意,在方法上同样要加上路由)
-
注意:如果某个类要实现浏览器web的调用,类注解就必须是@Controller,其他类注解就会404!另外,还必须给该类加上@ResponseBody返回非静态页面数据,否则就会报500!
-
lombok原理:
jvm只能识别.class字节码文件,所以lombok在编译时可以将注解@Slf4j 进行等价替换
-
lombok更多注解说明:(看看就行)
lombok注解文档:lombok注解
1)基本注解
注解 | 作用 |
---|---|
@Getter | 自动添加getter方法 |
@Setter | 自动添加setter方法 |
@ToString | 自动添加toString方法 |
@EqualsAndHashCode | 自动添加equals和hashCode方法 |
@NoArgsConstructor | 自动添加无参构造方法 |
@AllArgsConstructor | 自动添加全属性构造方法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为空 |
@RequiredArgsConstructor | 自动添加必需属性的构造方法,final + @NonNull 的属性为必需 |
2)组合注解
注解 | 作业 |
---|---|
@Data | @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor +@NoArgsConstructor |
3) 日志注解
注解 | 作用 |
---|---|
@Slf4j | 添加⼀个名为 log 的⽇志,使⽤ slf4j |
小结
- 使用日志快速定位和解决问题。另外,还可以记录用户登录日志、系统操作日志、程序执行时间等
- 日志是Spring Boot项目内置的框架
- 默认日志级别是info,只能打印大于等于默认级别的日志
- fatal不能自定义打印
- 日志默认级别的设置logging.level.
- 日志持久化设置:路径logging.file.path= 或 名称logging.file.name=
- 更简单的日志输出:lombok依赖,@Slf4j注解