Author: ogre@404SEC

简介

在开发和线上使用过程日志记录是一件非常重要,写好程序的日志可以帮助我们大大减轻后期维护压力。在实际的工作中,开发人员往往迫于巨大时间压力,而写日志又是一个非常繁琐的事情,往往没有引起足够的重视。开发人员应在一开始就养成良好的日志撰写习惯,并且应在实际的开发工作中为写日志预留足够的时间。

目的

为规范指导应用系统开发类项目的错误日志报警,规定应用系统开发日志的相关要求,特制定本细则。本细则主要提出应用系统开发错误日志规范。

日志为解决出自下面几个方面的需求:

  1. 记录用户操作的审计日志,甚至有的时候就是监管部门的要求。
  2. 快速定位问题的根源
  3. 追踪程序执行的过程
  4. 追踪数据的变化
  5. 数据统计和性能分析
  6. 采集运行环境数据

一般在程序上线之后,一旦发生异常,第一件事就是要弄清楚当时发生了什么。用户当时做了什么操作,环境有无影响,数据有什么变化,是不是反复发生等,然后再进一步的确定大致是哪个方面的问题。确定是程序的问题之后再交由开发人员去重现、研究、提出解决方案。这时日志就给我们提供了第一手的资料。

适用范围

本规范用于指导应用系统开发类项目的代码编写工作。本规范用于指导开发人员编写应用代码,指导安全管理人员检查应用系统报错告警。

安全日志规范要求

应用开发与脚本开发涉及到大量开发工作与调试工作,为了方便监控系统状态与排查错误,能帮助我们提高工作效率。因此本规范要求开发者在开发中必须使用符合规范的撰写日志模块。

日志内容

在日志使用的过程中,开发人员以及维护人员需要第一时间清晰明了的了解程序在什么时间的哪个业务的哪个程序的哪个模块的哪个功能函数因为什么数据做了什么操作,所以本规范为保证日志内容的可用性与运维高效性,特对日志内容做了更加细致的规范细则。

时效性

日志的时效性尤为重要。日志需要第一时间暴露问题,并可追溯问题源。因此日志必须包含时间戳并建议做实时日志,尽量不要异步(SECALL模式除外)。

可读性

日志的可读性直接决定了问题处理效率,所以在写日志的时候,需要格外注意输出适当的内容。

除去上一节讲的必须携带时间戳以外还需要表述一下几点:

1. 日志级别
2. 所属服务器
3. 所属业务应用(含路径)以及模块
4. 报错模块输入输出等详细报错内容
5. 日志格式一致

为保证日志内容易读,建议日志文件使用UTF-8格式,并尽量使用英文报错,每次报错注意以结尾回车符号代表错误信息结束。

安全性

在线上业务中日志内容的安全性尤为重要,因此在日志安全中要求做到一下几点(SECALL模式除外):

1. 线上业务不得使用DEBUG模式
2. 日志中不得包含用户提交的详细敏感信息
3. 日志不得记录详细配置信息
4. 储存位置规范(`/var/log/ApplicationName/`)
5. 日志按日期压缩存放(`/var/log/ApplicationName/date/`)

日志格式

基于日志可读性考究,在这一章节主要详细表述不同情况下的不同日志模式。

DEBUG

DEBUG为开发阶段使用,主要针对开发人员调试阶段,并只能用于调试阶段,在任何觉得有利于在调试或需要更详细的了解系统运行的状态的时候使用。

日志格式:

时间戳 DEBUG 文件 报错详细信息 
2018-05-22 15:35:53.850 DEBUG admin.py Start testing
2018-05-22 15:35:53.850 DEBUG admin.py Current users data is User[]{1,2,3,4}

INFO

INFO为表述系统运行时的运行过程状态,便于运维人员监控系统运行状态,在任何需要系统表述记录自身运行状态时使用。

日志格式:

时间戳 INFO 文件 报错详细信息 
2018-05-22 15:35:53.850 INFO admin.py Start Server Success!

WARNING

WARNING使用场景相对较少,仅用于系统模块出问题,但是不影响任何功能的情况或自定义功能用户未设置情况。

日志格式:

时间戳 模式 文件 详细信息 
2018-05-22 15:35:53.850 WARNING admin.py CreateUserDataFunction'User Age Not Set

ERROR

当系统出现严重错误影响任何模块功能正常使用的时候都必须调用ERROR模式,该模式详细记录了错误的所有详细信息。

日志格式:

时间戳 模式 文件 详细信息 
2018-05-22 15:35:53.850 ERROR admin.py cannot find package XXX

SECALL模式

SECALL模式比较特殊,SECALL模式主要为安全系统考虑,这里会搜集所有与用户和系统相关的信息。

  • 用户操作
  • 关键函数的输入输出或者整体系统流量
  • 包含敏感信息的其他任何日志

此模式开启需采用使用异步投递方式,不得本地留存。

日志格式:

时间戳 模式 主机#系统应用#模块#文件 详细信息 
2018-05-22 15:35:53.850 ERROR/WARNING/INFO 127.0.0.1#Testsystem#TestFunction#admin.py cannot find package XXX