1. 日志基础认知:什么是日志、日志的级别、日志的作用与价值

说实话,我做了十几年后端开发和运维,跟日志打了太多交道。刚入行那会儿,我觉得日志就是个可有可无的东西——代码能跑就行,写那么多日志干嘛?直到有一次线上事故,系统挂了整整两个小时,我翻遍服务器愣是找不到原因。嗯,从那以后,我再也不敢小看日志了。

这一章,咱们就把日志最基础的东西捋清楚。别觉得基础就不重要,你想想看,地基打不牢,后面那些检索优化、分析挖掘全是空中楼阁。

1.1 什么是日志

日志,说白了就是系统运行过程中产生的「流水账」。它记录了什么时间、在哪个模块、发生了什么事。每一行日志,都是系统状态的一个快照。

我个人习惯把日志分成三类:

  • 系统日志:操作系统、中间件、数据库产生的运行记录
  • 应用日志:业务代码里主动输出的调试、错误、业务事件
  • 安全日志:登录、权限变更、敏感操作等审计信息

举个例子,你在电商网站下单,背后可能产生了这些日志:

2025-01-15 10:23:45.678 [http-nio-8080-exec-3] INFO  c.e.order.OrderService - 用户[9527]发起下单请求,商品ID: 10086,数量: 2
2025-01-15 10:23:45.712 [http-nio-8080-exec-3] DEBUG c.e.order.InventoryClient - 调用库存服务,参数: {"skuId":10086,"qty":2}
2025-01-15 10:23:45.890 [http-nio-8080-exec-3] INFO  c.e.order.OrderService - 订单创建成功,订单号: ORD202501150001

每一行都包含了时间戳、线程名、日志级别、类名,以及具体的业务信息。这就是日志的原始形态。

核心要点:日志不是写给机器看的,是写给人看的。写日志的时候,要想着「如果出问题了,我看到这行日志能知道什么」。

1.2 日志的五个级别

日志级别这个东西,不同框架(Log4j、Logback、SLF4J)定义略有差异,但主流都遵循五个级别。我按严重程度从低到高给你捋一遍。

级别 含义 典型场景 生产环境是否开启
DEBUG 调试信息 变量值、调用链、临时验证 通常关闭
INFO 普通信息 业务流转、状态变更、关键节点 开启
WARN 警告 潜在风险、降级、重试、配置异常 开启
ERROR 错误 业务异常、系统故障、调用失败 开启
FATAL 致命错误 系统崩溃、数据丢失、不可恢复 开启

这里我多说几句,每个级别怎么用才合适。

DEBUG:我在项目中遇到过,有人把DEBUG日志当INFO用,生产环境一开DEBUG,磁盘直接被打满。DEBUG只适合开发环境和测试环境,线上除非定位疑难问题,否则别开。

INFO:记录业务的关键节点。比如「用户登录成功」「订单支付完成」「任务调度开始」。INFO不是流水账,别把循环里的每次迭代都打INFO,那跟刷屏没区别。

WARN:这个级别很多人不会用。我建议,当系统还能正常运行,但已经出现了「不太对劲」的信号时,就用WARN。比如接口响应时间超过阈值、缓存穿透、降级策略被触发。WARN是提前预警,别等到ERROR才慌。

ERROR:业务异常、调用下游失败、数据校验不通过。注意,ERROR不一定是系统挂了,但一定需要有人关注和处理。

FATAL:这个级别很少用。一旦出现,意味着系统已经无法继续运行。比如数据库连接池耗尽、磁盘空间不足、关键配置缺失。FATAL日志通常伴随着进程退出或重启。

避坑指南:我曾经在一个项目里看到有人把「用户输入了非法参数」打成了FATAL。这明显不对。FATAL是系统级别的灾难,不是业务级别的异常。滥用FATAL会让告警系统失效,真正出大事的时候反而被淹没了。

1.3 日志的作用与价值

日志到底有什么用?我总结了三句话:排障靠它、监控靠它、审计靠它。

1.3.1 故障排查

这是日志最核心的价值。系统出问题了,第一反应就是翻日志。我记得有一次线上服务突然超时,查了监控发现CPU没飙、内存没爆、网络没堵。最后是翻了ERROR日志,发现是某个第三方接口返回格式变了,反序列化失败。如果没有日志,这种问题根本无从下手。

1.3.2 监控与告警

日志是监控系统的「原材料」。通过收集日志中的ERROR、WARN数量,可以实时感知系统健康度。比如:

  • 每分钟ERROR数超过阈值 → 触发告警
  • 某接口响应时间超过2秒 → 记录慢日志
  • 登录失败次数过多 → 触发安全告警

说白了,没有日志,监控就是瞎子。

1.3.3 业务分析与审计

日志里藏着大量业务数据。用户行为、交易流水、操作记录,全在日志里。合规审计、数据复盘、用户画像,都离不开日志。

举个例子,电商大促结束后,运营要分析用户购买路径。从「搜索→浏览→加购→下单→支付」,每一步都有日志。把这些日志串起来,就能还原用户的完整行为链路。

1.3.4 性能优化

这个很多人容易忽略。通过分析日志中的时间戳,可以精确计算每个环节的耗时。比如:

2025-01-15 10:23:45.678 [入口] 开始处理订单
2025-01-15 10:23:45.712 [库存] 查询耗时: 34ms
2025-01-15 10:23:45.756 [价格] 计算耗时: 44ms
2025-01-15 10:23:45.890 [持久化] 写入耗时: 134ms
2025-01-15 10:23:45.891 [出口] 处理完成,总耗时: 213ms

看到没?瓶颈在持久化环节。这就是日志给出来的优化方向。

我的习惯:每个关键业务操作,我都会在入口和出口各打一条INFO日志,带上唯一标识(比如订单号、请求ID)。这样出了问题,直接根据ID把整个调用链串起来,排查效率翻倍。

1.4 日志知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当作整个课程的「地图」——后面每一章,都会在这张图上展开。

日志基础认知知识体系 日志基础认知 什么是日志 日志的五个级别 日志的作用与价值 系统日志 应用日志 安全日志 DEBUG INFO WARN ERROR FATAL 故障排查 监控告警 业务审计 性能优化 日志是系统运行时的「黑匣子」 排障、监控、审计、优化,都离不开它

这张图把本章内容分成了三大块:日志是什么、有哪些级别、有什么用。后面每一章都会在这个框架上不断加东西。你先把这张图记在脑子里,后面学起来会轻松很多。