1.⽇志有什么⽤?
⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?
答案是否定的,写程序不是买彩票,不能完全靠猜,因此⽇志对于我们来说,最主要的⽤途就是排除和定位问题。
这就跟去医院看病一样,医生听了你的病情描述后,先定位一个方向,然后就让你做一些检查,来进一步确认他的猜想,从而锁定病情。日志就像医生教你去做的检查,通过 这些 “检查的结果(日志)”来锁定病因(代码异常位置)。
除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:
1、记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
假设有一个平台,一天被登录了10万次,登录日志暴增!
正常情况下,可能一天 ,顶多1 万多点。
但是,此时我们发现这一天的登录日志暴增,并且查到有好几个账号,在这一天里登录上万次!这还需要想嘛?肯定有人对着几个账号进行了暴力破解!(盗号)
我们马上就可以对其进行冻结操作,让真正的用户修改密码信息后,才能恢复正常使用。
甚至说:直接拉黑名单。
2、记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
试想一下:当某个人在某个时间段进行了一次错误操作,而操作日志会把这个操作的具体信息给记录下来了(操作人,操作时间,执行的操作,数据改动的前后状态)。
此时,我们就可以根据这个日志,锁定 执行该操作的人(bb 他一顿),让其 对 操作数据 进行 回滚(还原) 操作【根据日志的记录】。
3、记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。’
你可以理解为:日志,记录了每一个方法的执行时间(在一个统一的地方记录)。
就是说:记录每一个方法之前,我们先做一个拦截,每一个方法执行之后,再做一个拦截。
这样我们就能记录每一个方法的执行时间了。
那么,记录方法的执行时间有什么作用呢?
可以方便我们以后 对 程序进行针对性的优化。
公司里面的 主管/经理,每周都会做一件事:按照方法执行时间来对日志进行排序。
将执行时间最长的 前十个方法,挑出来进行优化。
要想进行优化,没有日志,你怎么知道哪些方法的运行时间很长。
更别提对这些方法进行优化,提升执行效率。
提升用户的体验感,等于 “痴人说梦”。以上这些都是⽇志提供的⾮常实⽤的功能!!!
发现和定位问题,是日志 的 “ 程序属性 ”;记录⽤户登录⽇志,记录系统的操作⽇志,记录程序的执⾏时间,是日志的“业务属性”。
这两种“属性”加一块,才是 日志 的用途(作用)。
2.⽇志怎么⽤?
其实在我们Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示:
只不过,上面这些日志,不具有持久化存储的特性。【没存储到 硬盘中】
简单来说:上述的这些日志,就是进行一个简单的打印,不会存储到硬盘。
也就是说 启动下一个项目的时候,上一次启动项目的日志是没有被记录下来的。
通过上述⽇志信息我们能发现以下 3 个问题:1、Spring Boot 内置了⽇志框架(不然也输出不了⽇志)。
2、默认情况下,输出的⽇志并⾮是开发者定义和打印的,而是系统输出的日志,那开发者怎么在程序中⾃定义打印⽇志呢?
有的可能会说:使用 sout 输出语句进行打印,不就行了。
答案是不行的,因为 sout 语句 存在 几个问题!
3、⽇志默认是打印在控制台上的,⽽控制台的⽇志是不能被保存的,那么怎么把⽇志永久的保存下来呢?
3.自定义日志打印
Spring Boot ⾃定义打印⽇志的实现步骤:
1、在一个类中先获取到打印日志对象,日志对象 是 日志框架 提供的,而日志框架默认已经集成到 Spring Boot 里面了。(Spring Boot 内置了日志框架)
2、使⽤⽇志对象提供的方法实现日志的打印。接下来我们分别来看
准备工作:创建一个 Spring Boot 项目,并在其中创建一个UserController类,用来演示。
这个前面已经介绍过了,我直接一套流程给你。