本文已参与「新人创作礼」活动,一起开启掘金创作之路。
spring boot日志应用(一)
日志
程序中的日志是对程序运行情况的一种记录。
日志记录的是程序的运行情况,包括用户的各种操作、程序的运行状态等信息。
记录信息(可用于后续的数据分析) 定位问题 异常报警 数据统计
日志 VS Debug
Debug(断点会阻塞所有请求,导致系统不能响应)以外,还有很重要的一点就是有些问题很难准确复现,而日志不需要复现。结合这两个特点,日志就成了定位生产环境中问题的不二之选。
日志的分类
日志从功能来说,可分为诊断日志、统计日志、审计日志。
诊断日志
诊断日志顾名思义,就是用来诊断程序运行情况的。是用以定位问题最关键的日志信息。通常记录的是系统与外部交互的情况,比如读写文件、调用第三方服务、获取锁等。
审计日志
用来记录用户操作。比如电商系统中客服人员对订单的操作,社交系统中对账号申诉的一些处理等。
统计日志
统计日志就更好理解了,主要用来做一些统计工作。比如:用户访问统计、页面浏览、日活数量、用户访问 IP、资源下载数量等。
日志级别
事有轻重缓急,日志也不例外。日志通过划分不同的级别用来输出不同的信息,下表是日志级别的分类及说明:
级别简介
日志级别 | 描述 |
---|---|
OFF | 关闭:最高级别,不输出日志。 |
FATAL | 致命:用于输出可能会导致应用程序终止(崩溃)的错误。 |
ERROR | 错误:用于输出程序的错误(这些错误不会导致程序崩溃)。 |
WARN | 警告:用于输出警告信息,提示出可能出现的问题。 |
INFO | 信息:用于输出应用运行过程的详细信息。 |
DEBUG | 调试:用于输出更细致的对调试应用有用的信息。 |
TRACE | 跟踪:用于输出更细致的程序运行轨迹。 |
ALL | 所有:用于输出所有级别信息(包括自定义级别)。 |
日志的输出规则举例:
假如当前日志级别设置为 INFO,那么会将 INFO、WARN、ERROR、FATAL 级别的日志都打印出来。也就是说会打印大于等于当前日志级别的所有级别的日志。
级别详解
在以上日志级别中我们最常用的是 DEBUG、INFO、WARN、ERROR。其他级别我们不常用,也不推荐大家在实际生产中使用(因为一般情况我们根本用不到,当然自己开发过程中随便用哈,多多尝试)。下面我们一起看看最常用的四种日志级别吧。
ERROR
ERROR 级别的日志虽然不至于导致程序立刻崩溃,但是也已经影响用户正常使用了。因此当出现 ERROR 级别的日志是需要相关人员及时处理。以免损失用户利益,影响公司形象与品牌。可以配合监控系统,对 ERROR 级别的日志进行监控,然后通过邮件或者即时通讯工具(钉钉、微信都可以与监控系统做集成)向相关人员发送通知,从而更快速的解决问题,提升用户体验。
ERROR 级别一般用来记录程序中发生的任何异常错误信息(Exception),或者是记录业务逻辑出错。
WARN
WARN 级别的日志通常记录那些用户操作不当或者网络不稳定而出现的非预期情况。比如用户频繁调用验证码接口、上传文件格式不符、系统获取连接超时等。这些情况虽然不是很严重,但如果一直不处理,任由其持续下去就有可能影响程序的正常运行。假如一直超时,所有请求都被阻塞,就会出现很严重的后果。通常的处理方法是设置一个阈值,当 WARN 级别的日志数超过这个阈值以后,监控系统就发出报警信息,将问题扼杀在摇篮中。
INFO
INFO 是默认的日志级别,也是我们使用最多的,用来记录程序的正常运行记录。使用最多不代表没事就打 INFO 日志,INFO 日志主要用于一些程序执行的关键节点,比如资源初始化、销毁、某个复杂的业务逻辑的开始与结束、重要的参数信息、业务执行耗时等。INFO 用来记录关键信息,不能滥用,否则全是关键就等于没有关键了。
DEBUG
DEBUG 下会非常详细的(当然 TRACE 更细,但有时候我们不喜欢太细的东西)输出程序的运行情况,不仅可以掌控自己的程序的运行情况,还可以很好的了解一些第三方框架的运行轨迹,真是居家旅行的必备良品。DEBUG 虽好,但不要贪杯哟,呸!应该是不要随便开启才对。因为过多的日志输出会严重消耗资源,影响程序性能。所以在我们本地开发是开启就好了。
总结
日志在我们的系统中有着举足轻重的作用。但它蕴含着非常宝贵的信息。