概述
日志记录程序的运行状态、错误信息和性能数据。出了问题,日志往往是一线证据;没有日志,排查只能靠猜。
日志的用途
- 调试与排错:记录运行时的详细过程,出错后按时间线回放。
- 性能监控:记录耗时等指标,从中找出慢在哪里。
- 安全审计:留下用户行为和系统事件的痕迹。
- 运维支持:生产环境里判断服务是否健康、故障从哪台机器开始。
- 业务分析:统计用户行为、业务流程的实际走向。
Go 语言中的日志解决方案概览
Go 的日志方案分三层:标准库、第三方库、集中式工具。
Go 标准库
log:- 提供基础的日志输出,支持日志前缀、标志和输出重定向。
- 不支持日志级别和结构化日志,够用但仅限简单场景。
第三方日志库:
logrus:支持结构化日志、日志级别和钩子机制,适合日志格式复杂的场景。zap:为性能优化,支持结构化日志和日志级别,适合高吞吐服务。zerolog:以 JSON 格式记录,分配开销小,适合对延迟敏感的场景。
日志聚合与集中管理工具:
fluentd和logstash:把分散在各机器上的日志收集到一处统一检索。- 云日志服务:如 AWS CloudWatch 和 Google Stackdriver,负责收集、存储和分析,适合大规模分布式系统。