一、日志级别概述
日志级别(Log Level)是日志系统的核心机制,用于区分事件的重要性和紧急程度。合理的分级能帮助开发者:
快速定位问题根源
过滤无关日志信息
平衡日志详细程度与系统性能
二、各级别详解(从高到低)
1. FATAL/CRITICAL(致命)
核心特征:
最高严重级别
系统无法继续运行
典型场景:
FATAL: Failed to initialize database pool, shutting down...
2. ERROR(错误)
核心特征:
业务操作失败
系统仍可降级运行
使用规范:
必须包含错误码(如有)
记录完整的异常堆栈
3. WARN(警告)
核心特征:
非预期但可恢复的状态
需要人工关注
常见案例:
2025-05-27 12:00:00.378 WARN [main] c.s.user.ControllerLog - Using deprecated configuration key 'timeout_ms'
4. INFO(信息)
核心特征:
业务关键路径记录
反映系统健康状态
最佳实践:
记录重要状态变更
保持简洁(单行日志为佳)
5. DEBUG(调试)
核心特征:
开发阶段问题定位
生产环境默认关闭
典型输出:
DEBUG: Processing order 42: - Items: 3 - Total: $99.99 - Payment method: CreditCard
6. TRACE(跟踪)
核心特征:
最细粒度记录
性能敏感场景慎用
适用场景:
网络通信报文
高频调用的内部方法
三、实施建议
1. 环境配置策略
环境推荐级别附加说明生产环境INFO/WARN配合日志采样机制测试环境TRACE全链路跟踪预发环境DEBUG开启关键模块的DEBUG
2. 日志内容规范
必须包含:
时间戳(ISO8601格式)
线程/协程ID
类名+方法名(或模块名)
禁止包含:
用户密码/密钥
完整信用卡号
敏感个人身份信息
3. 性能优化技巧
Java(日志性能优化写法)
// 使用占位符代替字符串拼接
log.info("[AccessToken]appid: {}, appsecret: {}", wxAppId, wxSecret);
// 避免不必要的日志计算
if (log.isDebugEnabled()) {
log.debug("Expensive calculation: {}", computeMetrics());
}
四、跨语言对照表
级别Java (Log4j)PythonGo (log/slog)致命FATALCRITICALError错误ERRORERRORError警告WARNWARNINGWarn信息INFOINFOInfo调试DEBUGDEBUGDebug跟踪TRACENOTSETDebug
五、常见反模式
级别滥用 ❌ 将业务流程日志设为ERROR ✅ 正确:正常业务流程使用INFO
过度日志 ❌ 在循环内记录DEBUG日志 ✅ 正确:增加循环次数判断条件
模糊日志 ❌ "Failed to process request" ✅ 正确:"Payment failed: invalid CVV (order_id=123)"
六、总结
通过合理运用日志级别,可显著提升系统可观测性。建议:
根据环境动态调整日志级别
结合日志分析系统(如ELK)使用
定期审计日志内容合规性
重要业务日志添加唯一追踪ID(MDC (Mapped Diagnostic Context):见下一篇)
最佳实践数据表明:规范的日志管理可降低30%故障排查时间。