生产检查清单
上线前请逐项检查以下安全配置,确保日志系统安全可靠。
基础配置
- [ ] 日志级别 -- 生产环境设置为
LevelInfo或更高 - [ ] 输出格式 -- 使用
FormatJSON便于日志采集和分析 - [ ] 文件轮换 -- 配置合理的大小限制和保留策略
- [ ] 缓冲刷新 -- 确保程序退出前调用
Flush()或Close()
go
logger, _ := dd.New(dd.Config{
Level: dd.LevelInfo,
Format: dd.FormatJSON,
})
defer logger.Close()安全过滤
- [ ] 启用敏感数据过滤 -- 使用
DefaultSecurityConfig()或更高 - [ ] 自定义模式 -- 根据业务添加特定敏感字段模式
- [ ] 过滤统计监控 -- 定期检查过滤统计,发现异常
go
logger.SetSecurityConfig(dd.DefaultSecurityConfig())文件安全
- [ ] 日志权限 -- 文件权限
0600、目录权限0700(库默认值;目录需执行位才能进入) - [ ] 路径验证 -- 确保日志路径不可被用户输入控制
- [ ] 符号链接 -- 生产环境禁止符号链接
- [ ] 磁盘空间 -- 配置轮换策略防止磁盘写满
审计与完整性
- [ ] 审计日志 -- 启用审计日志记录安全事件
- [ ] 完整性签名 -- 启用 HMAC 签名确保日志不可篡改
- [ ] 审计日志独立存储 -- 审计日志与业务日志分开存储
go
audit, _ := dd.NewAuditLogger(dd.DefaultAuditConfig())
defer audit.Close()
cfg, _ := dd.DefaultIntegrityConfigSafe()
signer, _ := dd.NewIntegritySigner(cfg)性能
- [ ] 采样策略 -- 高吞吐场景考虑启用日志采样
- [ ] 缓冲写入 -- 使用
BufferedWriter减少 I/O 次数 - [ ] 同步写入感知 -- 默认写入路径为同步;高吞吐场景使用
BufferedWriter减少系统调用 - [ ] 内存监控 -- 监控日志相关内存使用
生命周期
- [ ] 优雅关闭 -- 使用
Shutdown(ctx)而非Close()(注意:Shutdown不会内部等待过滤 goroutine,而Close会调用WaitForFilterGoroutines,切换前需显式调用logger.WaitForFilterGoroutines(...)以避免 writer 关闭后过滤 goroutine 仍访问造成的竞态) - [ ] 超时设置 -- 设置合理的关闭超时(推荐 5-10 秒)
- [ ] 全局日志记录器 -- 通过
SetDefault()替换而非重复创建
go
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
logger.Shutdown(ctx)合规检查
- [ ] HIPAA -- 医疗行业使用
HealthcareConfig() - [ ] PCI-DSS -- 金融行业使用
FinancialConfig() - [ ] GDPR -- 确保不记录个人身份信息(PII)
- [ ] 数据保留 -- 配置符合法规的日志保留期限
监控告警
- [ ] 写入错误 -- 配置
SetWriteErrorHandler监控写入失败 - [ ] 过滤协程 -- 监控
ActiveFilterGoroutines()数量 - [ ] 审计统计 -- 定期检查审计事件统计
- [ ] 错误码告警 -- 对
PATH_TRAVERSAL、REDOS_PATTERN等安全错误码告警
go
logger.SetWriteErrorHandler(func(w io.Writer, err error) {
metrics.WriteErrors.Inc()
alert("日志写入失败:" + err.Error())
})