应用层日志记录

任何系统都有可能会出现问题,出现问题时我们的第一反应是为什么会出错?出错时发生了什么?如何复现?

如果你记录了完善的日志,那么只要一看日志,你就能快速知道程序出现错误时究竟发生了什么,进而追溯到导致错误发生的原因,从而修复问题。

可以说一个日志记录是一个完善的系统必不可少的一部分。本文简单探讨为什么记录日志,怎么记录日志以及记录日志的方法。

应用层日志作用

总的来说,日志的根本作用是记录必要的程序执行过程和状态,以便于以后追溯和参考。

跟踪调试

在很多特殊环境下,不能使用单步调试等方法实时知道程序的执行情况,这时就需要使用日志来记录程序执行情况。

帮助开发人员或者测试人员知道程序执行的过程和状态,进而完善程序和定位解决BUG等。

跟踪排查错误

当错误发生时,我们需要知道当时的程序执行情况,比如执行到那一步,执行时的个变量状态等。

我们需要通过对日志追踪,获取该错误发生时的具体执行环境,只有通过这些信息,我们才能分析出错误出现的原因,以及如何修正错误。

备案

另外,对于一些特别敏感信息的操作,比如涉及金钱的操作,需要记录所有的流水日志,以供以后对账等参考。

而且这些日志也能够在系统出现问题时,恢复数据,降低经济损失。

日志的分类

可以根据日志的用途对日志进行分类,也可以根据日志的必要性或者等级来进行分类,常用的分级方法依据日志的严重等级,如下:

  • TRACE级:尽量详细的信息,以便于开发过程中观察,在开发完上线后应该被屏蔽,
  • DEBUG级:记录用于调试过程中的一些必要信息,在开发完上线后应该被屏蔽
  • INFO级:记录程序执行的关键步骤,在以后具有参考价值,在线上系统中有保留的价值
  • WARN级:属于轻微的“警告”,记录程序出现的异常情况,但是不影响正常使用
  • ERROR级:属于“普通的错误”,在程序可以控制的范围内,不会造成连锁影响或巨大影响
  • FATAL级:属于“致命错误”,可导致整个系统或者一系列功能无法使用,甚至导致系统瘫痪、关闭
  • EMERG级:属于“灾难”级,导致整个系统崩溃

其中TRACE级和DEBUG级的日志,只用于开发调试过程中,记录信息所在空间大,应该在开发完成后关闭。

在很多系统中可以不用这么细致的分类,但是一个完善的日志系统最起码包含三个以上基本基本的日志:

如可以只包含DEBUG级,INFO级,ERROR级。

日志系统设计

在一个系统设计的前期,就应该规划好完善的日志记录方案,因为日志记录伴随在系统开发的没一个部分。

如果指靠在系统完成后在添加必要的日志记录是不现实的。

明确日志记录的目的

需要明确记录的日志是什么样的人使用:

  • 开发人员需要使用的信息:DEBUG级等
  • 运维人员需要知道的信息:ERROR级等
  • 系统使用人员需要知道的信息:日志的输出和反馈等
  • 系统审计人员需要知道的信息:关键业务INFO级日志

针对不同的使用人员,我们还应该规划合适的日志记录形式。

日志格式

随着系统的运行,日志肯定是不断增长的,为了以后能够快速找到需要的日志,需要注意一下几点:

  • 善用日志分级,不滥用日志,不关键的日志应该在线上系统屏蔽
  • 为不同的日志总类添加标签,以便快速查找特定类型日志
  • 按照日期分类,一方面便于日志转存,另外也助于快速定位日志
  • 日志应该有相对标准的格式,比如json,序列化等,以便于查找关键信息

总的来说,日志的记录一定是为了以后的追踪和读取,应充分考虑到以后获取日志的情形。

日志记录应注意的问题

  • 性能损耗:日志记录不应过于频繁,应考虑到日志记录到来的系统性能损耗
  • 安全性:不在日志中记录涉及安全的敏感信息,如在日志中记录用户密码是绝对禁止的
  • 时效性:应该定期清理没有参考意义的日志,避免日志积累过多占用系统存储空间

日志的存储方式

常见的日志存储系统如下:

  • 系统自带文件系统
  • 分布式文件存储系统
  • Mysql数据库
  • Mongodb数据库

无论是哪一种存储方式,都要考虑到以后查询日志的遍历性,日志存储的性能损害,日志的用途等。

在一些需要对日志进行大数据分析的场景,还需要把日志转存到HDFS等专门的环境中。

实际应用

在不同的业务场景,需要记录的日志内容是千差万别的,但是它们的本质一定是为了之后的追溯使用。

在想Java,PHP等实际语言的开发中,可以为一个系统封装一个统一的入口Log日志记录类。

在这个Log类中规定统一的日志格式以及各种不同的日志记录级别,还可以在这个类中附加额外的信息等。

绝对避免在系统中随意记录日志。

原文更新至:< http://uusama.com/875.html>

posted @ 2018-09-25 17:47  悠悠uusama  阅读(2329)  评论(1编辑  收藏  举报