业务日志输出规范
日志文件规范
1.1. 日志文件命名
日志文件名格式:logName_YY-MM-dd_hh.[ roll count].log
示例:sdk_2020-09-03_11.0.log
1.2. 日志滚动大小
日志文件大小等于100M,须日志滚动
由于Linux对于小文件存在Inodes限制,所以对于日志量较大,开启INFO等较低级别日志,若日志大小设置较低,将会产生大量【roll count】,造成Inodes报警。
1.3. 日志文件存放
日志文件统一保存在业务软件服务器的数据盘目录下的logs目录中。
示例:
sdk服务的服务器数据盘符为/data,则日志将存放在/data/logs/{appid或域名}目录中。
同机器nginx日志将会放置在/data/logs/nginx
好处,统一日志存放路径非常有利与后续运维自动化,否则每个程序日志采集端都要自定义不同的日志路径,非常不利于运维自动化的体系建设
日志内容规范
2.1. 组件编码(appID)
组件编码为业务软件标识,用于ELK系统搜索指定业务模块日志使用,该值全局唯一。
2.2. 时间戳(@timestamp)
日志产生的时间,推荐使用时间标准:Time_ISO8601。其中,yyyy代表四位数年份,MM代表两位数月份,dd代表两位数日期,HH代表两位数小时时间,mm代表两位数分钟时间,ss代表两位数秒时间,Time_zone代表时区。
@timestamp=“yyyy-MM-ddTHH:mm:ss+Time_zone”
示例:@timestamp=“2020-09-03T14:34:15+08:00”
2.3. 日志级别(level)(极其建议遵守)
日志级别
级别描述
信息类别
FATAL
业务软件发生严重错误,服务被终止或者重启,需要立即被处理。
错误日志信息日志
ERROR
业务软件发生错误,后续流程还能继续进行,但也已经影响了用户的正常访问。该级别的错误也需要马上被处理。
错误信息日志
WARN
有潜在风险的、不会造成大危害的错误,需要开发人员给予足够关注,往往表示有参数校验问题或者程序逻辑缺陷。
错误信息日志
INFO
在正常运行状态中,粗粒度的、关键流程/事件、业务软件重要的配置和参数信息,可用来表示业务软件健康度的信息
一般信息日志
DEBUG
对调试(debug)有帮助的信息、事件,默认情况下不打开日志记录。
调试信息日志
2.4. 日志字段
由于新的ELK架构建立字段时采用json格式,所以须统一指定日志内容字段格式,以实现ELK接收日志方案的统一化。
{"@timestamp": "2020-09-03T14:34:15+08:00", "appID": "sdk", "level": "INFO", ....}
2.5. 必要字段
每条业务日志须包含以下字段:组件ID(appID)、时间戳(@timestamp)、日志级别(level)。
研发注意事项
时间戳字段名必须为@timestamp,时间输出规范为time_iso8601。举例:"@timestamp": "$time_iso8601"
整体日志输出每一条必须json可以直接转化,统一日志输出日志名,统一日志存放路径,统一日志字段格式。
日志等级(level)要逐渐有严格的等级评估意识,科学使用WARN,INFO等级别,后续可以针对针对日志级别出现次数进行统计监控预警,以及时优化代码,非常有利于提升程序健壮性,以免长期出现问题不能发现积累酿成灾难事件