日志记录规范实践
一、注意点
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
Featured Tags
工具类
XML
JAVA
Java
Mybatis
反射
代理模式
日志
工厂方法模式
装饰器模式
结果集映射
Web
RESTful
WebAPI规范
SQL
Redis
Jira
SynapseRT
有限状态机 State Machine
statemachine
SpringBoot
IDEA
Tomcat
Vue
Docker
Springboot
Apache Ignite
项目发布与调试
白帽子讲web安全
黑名单
通用化
企业中台实践
MacOS
docker
minio
springboot
分布式存储
Postgres
数据备份
数据恢复
K8S
抖音小程序
开发实践
SpringCloud
Skywalking
Nacos
Kubernetes
Secret
ConfigMap
Git
GitOps
云原生
RocketMQ
ActiveMQ-Artemis
ClickHouse
Kamailio
sipp
Homer
heplify
heplify-server
HEP