二、日志体系基础:日志分类、日志级别与存储格式

好,咱们进入正题。日志体系,说白了就是PIS系统的“黑匣子”。你想想看,列车跑在线路上,屏幕突然黑了,广播突然哑了,你远程怎么查?靠的就是日志。

我个人习惯,把日志体系拆成三块来理解:分什么类、定什么级、存成什么样。这三块搞明白了,后面做日志分析、远程维护,才有根基。

2.1 日志分类:系统日志、应用日志、安全日志

PIS系统的日志,我一般分成三大类。这不是我瞎编的,是实际运维中,你排查问题时的三条路径。

  • 系统日志:记录操作系统、硬件驱动、网络接口的状态。比如“网卡down了”、“磁盘空间不足”、“CPU温度过高”。
  • 应用日志:记录PIS软件自身的运行轨迹。比如“播控软件启动”、“视频流切换”、“到站触发成功”。这是咱们最常看的。
  • 安全日志:记录登录、权限变更、异常访问。比如“用户admin远程登录”、“配置文件被修改”、“非法IP尝试连接”。

我记得有一次,某条线路的PIS频繁黑屏。应用日志里啥也没报,干干净净。我差点怀疑是硬件问题。后来翻了系统日志,才发现是系统时间被NTP同步跳变,导致播控进程崩溃。你看,只看一类日志,容易掉坑里。

我的习惯: 排查问题时,先看应用日志找直接原因,再看系统日志找间接原因,最后翻安全日志确认是不是被人动了手脚。三条腿走路,稳当。

2.2 日志级别:DEBUG / INFO / WARN / ERROR / FATAL

级别这东西,说白了就是给日志贴个“严重程度”的标签。我见过不少项目,日志级别设得乱七八糟,要么全是INFO,要么全是ERROR,分析起来头大。

咱们PIS系统,一般用这五个级别,从低到高:

级别 含义 典型场景
DEBUG 调试信息 变量值、函数入口出口、循环次数
INFO 正常信息 服务启动、播控切换、到站触发
WARN 警告 磁盘使用率超80%、网络延迟偏高
ERROR 错误 播控进程崩溃、数据库连接失败
FATAL 致命错误 系统宕机、主控板完全失联

嗯,这里要注意:生产环境千万别开DEBUG。为什么?我经历过一次,某条线路的PIS控制器,DEBUG一开,一天能刷几个GB的日志,直接把存储写爆了,系统卡死。后来我定了个规矩:生产环境只保留INFO及以上,DEBUG只在测试环境用。

避坑指南: 我曾经在远程维护时,为了查一个偶发问题,远程把日志级别调成了DEBUG。结果日志量暴增,网络带宽被占满,远程会话直接断掉。从那以后,我改日志级别前,都会先确认磁盘和网络余量。

2.3 日志存储格式:结构化与非结构化

日志存成什么样,直接影响你后续能不能快速分析。我见过最原始的,就是纯文本,一行一行地写,看着像天书。现在咱们PIS系统,主流做法是结构化日志

什么叫结构化?说白了,就是每条日志都按固定的模板来写,比如JSON格式。举个例子:

{
  "timestamp": "2025-03-21 14:30:00.123",
  "level": "ERROR",
  "module": "PlayerService",
  "thread": "main-12",
  "message": "视频流播放失败",
  "details": {
    "url": "rtsp://10.1.1.100:554/stream1",
    "error_code": 1003,
    "retry_count": 3
  }
}

你看,时间、级别、模块、线程、消息、详情,一目了然。用工具(比如ELK、Graylog)一搜,就能快速定位问题。

我个人建议,PIS系统的日志存储格式,至少包含以下字段:

  • 时间戳:精确到毫秒,带时区。别问我为什么,跨时区线路调试时你就知道了。
  • 日志级别:DEBUG/INFO/WARN/ERROR/FATAL
  • 模块名称:比如播控模块、广播模块、通信模块
  • 线程/进程ID:方便追踪并发问题
  • 消息体:描述发生了什么
  • 上下文:比如设备ID、线路ID、车厢号

你想想看,如果日志格式不统一,有的写“播放失败”,有的写“视频流异常”,你拿什么去聚合分析?所以,我每次做PIS系统设计,第一件事就是定日志规范,格式写进开发文档里,谁不按规范来,代码review直接打回。

核心观点: 日志不是写给机器看的,也不是写给人看的,而是写给“未来的你”看的。三个月后,你回来查问题,格式清晰、分类明确的日志,能救你一命。

好了,日志体系的基础就这些。分类让你知道去哪找,级别让你知道有多严重,格式让你知道怎么查。下一节,咱们聊聊日志采集和传输,那又是另一番天地了。