日志的级别
2026/7/23大约 2 分钟
在 IT 系统和软件开发中,日志级别(Log Levels)是对信息严重程度的分类。它能帮助开发者在海量信息中快速过滤出关键问题。
目前业界最通用的标准是基于 RFC 5424(Syslog 标准)定义的 8 个级别,但在一般的应用开发(如 Python Flask、Java Spring、Log4j)中,常用的主要是以下 5 到 6 种。
1. 常用日志级别(从轻到重)
| 级别 | 英文名 | 含义 | 场景示例 |
|---|---|---|---|
| 调试 | DEBUG | 最详尽的信息。仅在开发阶段或排查复杂问题时开启。 | "变量 x<br>的值当前为 10", "数据库查询耗时 5ms" |
| 信息 | INFO | 记录系统的正常运行状态。通常作为生产环境的默认级别。 | "用户 admin<br>登录成功", "服务已在端口 8080 启动" |
| 警告 | WARN | 出现了非预期的异常,但系统仍能继续运行,不需要立即干预。 | "磁盘空间剩余不足 10%", "接口调用响应过慢" |
| 错误 | ERROR | 发生了严重问题,导致某个功能失效,需要引起重视。 | "无法连接数据库", "用户上传文件失败", "代码抛出 NullPointerException" |
| 致命 | FATAL / CRITICAL | 最严重。导致系统崩溃、无法提供服务的事故。 | "主进程意外退出", "服务器内存溢出 (OOM)", "核心硬件故障" |
2. 特殊级别
除了上述五个,还有两个控制级别的开关:
- TRACE:比 DEBUG 更细,通常记录每一步代码的执行流,甚至是方法进入/退出。
- ALL:开启所有级别的日志。
- OFF:关闭所有日志输出。
3. 日志的“向上兼容”原则
日志系统通常遵循一个规则:一旦你设置了某个级别,系统会记录该级别及以上的所有日志。
举个例子:
- 如果你设置级别为
**INFO**,那么INFO、WARN、ERROR、FATAL都会被记录,但DEBUG和TRACE会被过滤掉。 - 如果你在生产环境由于硬盘告急想减少日志,可以将级别调高至
**ERROR**,此时INFO和WARN都不会再打印。
4. 最佳实践提示
- 生产环境禁止 DEBUG:DEBUG 日志量极大,会迅速占满磁盘并严重拖慢系统性能(因为写磁盘是耗时操作)。
- 动态调整:成熟的系统(如 Spring Boot 或 Flask)支持在不重启服务的情况下,通过接口动态修改日志级别,方便在线调试。
- 结构化日志:建议使用 JSON 格式记录日志,方便后续配合 ELK(Elasticsearch, Logstash, Kibana)进行检索和可视化分析。
