日志记录规范实践

日志记录规范实践

Posted by Claire on February 5, 2021

日志记录规范实践

一、注意点

1.1 严格区分日志级别

code 描述 备注
emergency 导致系统不可用的事故  
alert 已经影响了用户的正常访问  
critical 紧急情况,程序组件不可用  
error 运行时出现的错误 常用,严重的邮件或电话告警,数据库连接、业务流程阻断
warning 可能影响系统功能,需要提醒的重要事件 常用
notice 不影响正常功能,但需要注意的消息  
info 用于记录系统正常运行情况下的一般信息 常用
debug 帮助开发、测试、运维人员对系统进行诊断的信息 开发、测试阶段常用
  • 整个团队(包括运维人员)需要对日志级别有明确的规定
  • 绝不要打印没有用的日志,防止无用日志淹没重要信息

1.2 保证日志格式的结构化

  • 约定结构,JSON/String
  • 约定字段

1.3 使用何时的工具

  • ELK/Gralog

1.4 对日志分类

日志从功能来说,可分为诊断日志、统计日志、审计日志。

诊断类型日志可以分为:

  • 请求入口和出口
  • 外部服务调用和返回
  • 资源消耗操作: 打开文件等
  • 容错行为: 譬如云硬盘的副本修复操作
  • 程序异常: 譬如数据库无法连接
  • 后台操作:清理程序
  • 启动、关闭、配置加载
  • 抛出异常时,不记录日志

统计日志:

  • PV UV 等用户访问统计

审计日志:

  • 管理操作

1.5 日志格式要统一

1.6 对日志大小的合理切分

二、日志中记录什么

  • 系统初始化:启动时的重要参数
  • 运行的所有错误和警告,编程语言提示异常
  • 持久化前与后的数据
  • 模块间调用/远程调用:各模块之间的请求和响应,三方服务
  • 重要的状态变化,业务流程预期不符
  • 定时任务的执行进度
  • 系统核心角色,组建的关键动作,uid+bizid
  • 核心业务操作/程序流程:核心流程,可以使用TraceID/调用层级
  • 类名
  • 可预期异常
  • 预期外错误

三、实践

2019-12-01 00:00:00.000|pid|log-level|[svc-name,trace-id,span-id,user-id,biz-id]|thread-name|package-name.class-name : log message
  • 日志时间
  • pid,pid
  • log-level,日志级别
  • svc-name,应用名称
  • trace-id,调用链标识
  • span-id,调用层级标识
  • user-id,用户标识
  • biz-id,业务标识
  • thread-name,线程名称
  • package-name.class-name,日志记录器名称 包名类名
  • log message,日志消息体

四、REGERENCE

王健:最佳日志实践 最佳日志实践2