关于日志那些事
对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。在生产环境中,日志是查找问题来源的重要依据。本文从日志的定义、作用、分类、级别等角度介绍日志。
什么是日志
日志是用来保存系统发生的事件信息和各种对象执行的操作信息的管理对象,日志记录存放于其中。
在计算机领域,日志文件(logfile)是一个记录了发生在运行中的操作系统或其他软件中的事件的文件,或者记录了在网络聊天软件的用户之间发送的消息。 日志记录(Logging)是指保存日志的行为。 最简单的做法是将日志写入单个存放日志的文件。
为什么要使用日志
由于日志通常不属于系统的核心功能,所以常常不被团队成员所重视。对于一些简单的小程序,可能并不需要在如何记录日志的问题上花费太多精力。但是对于作为基础平台为很多产品提供服务的后端程序,就必须要考虑如何依靠良好的日志来保证系统可靠的运行了。系统上线运行时出现bug,通常不能够终止程序进行Debug,只能通过日志来定位查找问题。
还原现场,追溯问题
在系统出现问题或是为了检查系统是否出问题时,我们常常会去查看日志,此种日志多是human-readable 的。可以是格式化的日志,也常见非格式化的日志。例如:Linux系统日志
监视、统计、取证等的分析
用于这种用途的日志很多,例如访问日志、审计日志等。为了方便系统处理分析,多是格式化的数据。例如:服务器安全日志,IIS日志
数据传递
日志也经常用作系统间的信息传递,一个系统的日志可以是另一个系统的输入。譬如,MySQL 的主从间的数据传递就是借助Binlog 的。由于多是系统间的内部信息传递,二进制格式(协议)比较多。btw,由于事务日志,很多数据库本身就是一个日志系统 (“THE LOG IS THE DATABASE”)。
数据备份及恢复
日志也有用于数据的备份的。数据库系统就常有Write-ahead Logging 等事务日志(如Innodb Log)来恢复状态和数据。MySQL 也有做Binlog 备份及恢复的。
好的日志可以帮助系统的开发和运维人员: