本文目录导读:

开源日志分级通常遵循 “严重性递增” 的原则,从最详细的诊断信息到最严重的系统崩溃,最广泛采用的模型是基于 Syslog 或 Log4j 的标准,一般分为以下几个级别(从低到高):
标准分级层级
以下是业界最通用的6个级别(以及额外的OFF/FATAL):
| 级别 | 名称 | 数值 | 典型用途 | 示例 |
|---|---|---|---|---|
| TRACE | 追踪 | 0 (最低) | 极度详细的调试信息,仅用于开发环境或临时诊断。 | 方法入口、变量值变化、SQL预编译参数。 |
| DEBUG | 调试 | 1 | 开发人员诊断问题。 | 请求处理流程、数据库查询、API调用参数。 |
| INFO | 信息 | 2 | 关键的业务运行状态,用于监控系统健康状况。 | 服务启动成功、用户登录、定时任务开始/结束。 |
| WARN | 警告 | 3 | 潜在的问题或不推荐的行为,系统可正常运行但不完美。 | 磁盘空间不足(未达阈值)、配置过时、API被废弃、重试操作。 |
| ERROR | 错误 | 4 | 非致命的错误,需要关注,功能失败,但系统整体可用。 | 数据库连接失败、文件读写异常、用户请求处理失败。 |
| FATAL | 致命 | 5 (最高) | 极其严重的错误,系统可能即将崩溃或无法继续运行。 | 内存溢出、关键服务不可用、配置文件损坏。 |
- OFF:特殊级别,用于完全关闭日志输出,不属于实际记录级别。
常见的日志框架与对应关系
不同的开源日志库可能有细微的名称差异,但概念一致:
| 框架 / 语言 | 低级 -> 高级 |
|---|---|
| Log4j / SLF4J (Java) | TRACE -> DEBUG -> INFO -> WARN -> ERROR -> FATAL |
| Logback (Java) | TRACE -> DEBUG -> INFO -> WARN -> ERROR |
| Python logging | DEBUG -> INFO -> WARNING -> ERROR -> CRITICAL |
Rust log crate |
TRACE -> DEBUG -> INFO -> WARN -> ERROR |
Go logrus |
Trace -> Debug -> Info -> Warn -> Error -> Fatal -> Panic |
| Ruby Logger | DEBUG -> INFO -> WARN -> ERROR -> FATAL |
生产环境与开发环境的最佳实践
日志分级最重要的应用是 “按环境动态配置输出级别”。
- 开发环境: 设置为 TRACE 或 DEBUG,尽可能多输出,排查问题。
- 测试环境: 设置为 INFO 或 DEBUG,当测试失败时,可临时降低到TRACE。
- 生产环境: 强烈建议设置为 INFO,仅在排查特定线上问题时临时调整为 DEBUG(需谨慎)。
- 不要在生产环境开启 TRACE 或 DEBUG,这会导致:
- 性能暴跌:大量I/O操作拖垮CPU。
- 磁盘爆炸:日志文件飞速增长,填满磁盘。
- 噪音过多:淹没真正关键的ERROR/WARN信息。
- 不要在生产环境开启 TRACE 或 DEBUG,这会导致:
如何合理设置(核心原则)
-
不要随意使用级别:
- 只用
INFO记录业务事件,不要用INFO打印变量值(调试)。 - 只用
ERROR记录需要人工介入的策略性问题,用户输入错误、网络超时(若已重试成功)不应是ERROR,而是WARN。
- 只用
-
按模块/包动态配置: 优秀的日志框架支持按包(Package)或命名空间设置不同级别。
# 全局级别为 INFO rootLogger.level = INFO # 但对自己正在开发的模块开启 DEBUG logger.com.mycompany.payment.service.level = DEBUG # 对某些烦人的第三方库,只显示 WARN 以上 logger.org.apache.http.level = WARN
-
错误处理中的日志:
- 在Catch块中:当捕获到异常时,只打印一次
ERROR日志(带上异常栈),不要在上下级层层打印。 - 区分业务异常与系统错误:用户密码错误(
WARN);数据库连接失败(ERROR)。
- 在Catch块中:当捕获到异常时,只打印一次
-
避免日志污染:
- 不要用
System.out.println()或print()代替日志框架。 - 不要在生产环境打印
TRACE级别的循环内日志(for循环里每读一行打印一次)。
- 不要用
一个实际项目的配置示例
假设你有一个Java项目,使用Logback,生产环境的配置可以这样:
<!-- 生产环境推荐配置 -->
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root>
<!-- 对关键的支付模块,打开更详细的日志,但只在需要时更改为DEBUG -->
<logger name="com.mycompany.payment" level="INFO" />
<!-- 对第三方客户端库,只显示警告及以上,减少噪音 -->
<logger name="org.apache.kafka" level="WARN" />
<!-- 对自己的核心业务代码,可以按需设置 -->
<logger name="com.mycompany.service" level="INFO" />
最核心的一句话:生产环境默认用 INFO,只记录“发生了什么业务事件”和“出了什么不可原谅的错误”;所有调试细节请使用 DEBUG 或 TRACE,并仅在开发或临时排查时启用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播