程序员如何做「日志设计」:不是记录,是监控
日志不只是调试工具,是生产环境的眼睛。
好的日志设计,能让你在出问题的时候快速定位原因。
一、日志的作用
1. 调试
开发阶段,看日志找 bug。
2. 监控
生产环境,通过日志知道系统运行状态。
3. 审计
谁在什么时间做了什么,有记录可查。
4. 分析
用户行为、性能数据、业务指标——都从日志来。
二、日志级别
DEBUG
开发时用,生产环境关闭。
详细信息,变量值、中间状态。
INFO
正常流程记录。
入口、出口、关键步骤。
WARN
警告,不影响但需要注意。
如:重试成功、配置使用了默认值。
ERROR
错误,需要处理。
如:异常、调用失败。
三、好的日志习惯
1. 记录关键节点
- 请求入口
- 业务关键步骤
- 数据库操作
- 外部调用
- 异常捕获
2. 记录上下文
不只是"执行到这里",而是:
- 请求 ID(用于关联)
- 用户 ID(用于定位)
- 关键参数(用于复现)
3. 异常日志要完整
log.error("订单创建失败", e);
// 输出:异常类型 + 堆栈 + 原因
4. 不要过度日志
- 每个函数都打日志 = 没有日志
- 日志不要打印大对象(如整个 Request)
- 敏感信息脱敏
四、日志格式
结构化日志(推荐)
{"level":"INFO","time":"2024-01-01 10:00:00","msg":"用户登录","userId":123}
方便搜索、统计、分析。
常见字段
- level:级别
- time:时间
- traceId:请求 ID
- userId:用户 ID
- action:操作
- duration:耗时
五、工具
Java
- Logback / Log4j2
- SLF4J(门面)
日志平台
- ELK(Elasticsearch + Logstash + Kibana)
- Loki
- Sentry(异常追踪)
六、一句话总结
日志设计 = 关键节点 + 上下文 + 结构化 + 级别合理。