1. 日志基础概念

刚入行那会儿,我其实对日志挺不屑的。感觉不就是打印点消息嘛,谁不会啊。直到有一次线上服务挂了,我翻着控制台一堆乱码,完全不知道从哪查起……嗯,从那以后,我才真正意识到日志这东西,说白了就是系统的“黑匣子”。

日志到底用来干嘛?

日志的作用,我总结下来就三件事:

  • 排错定位:代码崩了,先看日志。哪行报错、什么参数、堆栈信息,一目了然。
  • 监控告警:程序跑得稳不稳,业务量涨没涨,日志能告诉你实时状态。
  • 审计追溯:出事故了,谁操作了什么、什么时间、结果如何,日志就是铁证。
我个人的习惯:任何模块上线前,先想清楚“出问题了我需要看什么日志”。如果能做到这一点,日后排查能省下大把时间。

日志级别——你得知道哪个该打、哪个不该打

日志级别就像天气预报的预警信号。级别不同,含义和紧急程度完全不一样。我见过不少新手所有日志都用 print(),结果生产环境刷屏刷到机器报警。来,看一下标准的 Python 日志级别:

级别 数值 什么时候用
DEBUG 10 调试信息,开发环境用,生产环境通常关掉
INFO 20 程序正常运行的状态信息,比如“用户登录成功”
WARNING 30 有问题但还能跑,比如“磁盘空间不足 80%”
ERROR 40 功能受损,比如“数据库连接失败”
CRITICAL 50 整个系统要崩了,需要人工立即介入
我曾经踩过的坑:把一个 logger.debug() 写成了 logger.info(),结果在线上每天刷出几百万条调试日志,磁盘直接打满。生产环境一定要控制好日志级别啊!

为什么要分级别?你想想看,如果所有信息都输出,排查问题时反而找不到重点。级别就是过滤器,让你只看到当前关心的信息。

日志格式——信息得有规矩

日志不是随便写个字符串就完事了。好的日志格式能帮你快速定位问题。

# 一个典型的 Python 日志格式
2025-09-15 10:23:45,123 - myapp - INFO - 用户 9527 登录成功 [request_id: abc123]

一般包含这几部分:

  • 时间戳:精确到毫秒,方便排序和对齐
  • 模块名:知道是哪段代码打出来的
  • 级别:一目了然严重程度
  • 消息正文:核心信息
  • 上下文:比如请求ID、用户ID、调用链ID

我个人习惯在日志里加上 request_id。这样即使并发请求乱飞,也能把同一用户的日志串起来。这个技巧在我们后续的关键字匹配中会非常有用。

常见日志系统简介

说到日志系统,光靠 Python 自带的 logging 模块,在小项目里够用。但一旦上了规模,就需要专门的日志系统来收集、存储、查询。这里简单介绍几个我工作中用过的:

系统 特点 适用场景
Python logging 内置模块,零依赖,配置简单 单体应用、脚本、小项目
ELK (Elasticsearch + Logstash + Kibana) 全文搜索、可视化、集群扩展强 分布式系统、微服务、大数据量
Grafana Loki 轻量级,与 Prometheus 生态结合好 云原生、K8s 环境
Splunk 商业化,搜索性能强,但贵 金融、大型企业
我的建议:咱这课程主要讲 Python 日志关键字匹配,底层原理和 Python logging 紧密相关。先把这个玩转,后面再迁移到 ELK 或 Loki 都很容易。

说到底,日志系统的核心就三个动作:产生(应用打日志)、传输(网络或文件)、存储查询(数据库或搜索引擎)。本章我们先打好基础,后面一步步实战。

为了把本章的知识点串起来,我画了一张框架图,你看完之后应该能对整个日志体系有个整体感觉。

日志基础概念知识体系 日志基础概念 作用 日志级别 日志格式 排错定位 监控告警 审计追溯 DEBUG INFO / WARNING ERROR / CRITICAL 时间戳 模块+级别 上下文 常见日志系统 Python logging ELK Loki / Splunk 本章重点:理解日志产生端(Python logging) 后续章节基于此展开关键字匹配实战

这张图把本章的四个核心块串在一起了:日志作用、日志级别、日志格式、常见日志系统。你可以看到,所有知识都围绕着“日志基础概念”这个根节点展开。记住这个结构,后续学关键字匹配时,你会知道每一步的信息从哪里来、往哪里写。

嗯,基础概念我们就聊到这儿。别小看这些,很多线上事故排查最终都归结到“日志级别打错了”或者“格式里漏了关键信息”。打好这个底,后面实战才会顺手。