系统日志
网关在启动 / 采集 / 通信 / API 调用过程中产生的系统日志(Cassandra pe.app_system_log)的检索和查看页面。

点击首页卡片*系统错误(今日)*的红色数字 → 自动跳转(仅今日 ERROR),或直接进入 /ui/system/log/list。
1. 页面结构
┌─────────┬──────────────────────────────────────────────────┐
│ 좌측 │ 우측 │
│ 검색폼 │ 로그 목록 (DataTables) │
│ │ │
│ [기간] │ ┌───────────┬───────┬──────────────────────────┐ │
│ [레벨] │ │ 시간 │ 레벨 │ 메세지 │ │
│ │ ├───────────┼───────┼──────────────────────────┤ │
│ [검색] │ │ ... │ INFO │ ... │ │
└─────────┴──────────────────────────────────────────────────┘
默认搜索期限:最近30天(00:00 ~ 23:59)。
2. 左侧搜索表单
| 字段 | 含义 | 默认值 |
|---|---|---|
| 搜索期限 | YYYY-MM-DD HH:mm ~ YYYY-MM-DD HH:mm 范围 | 从今日起29天前的 00:00 ~ 今日 23:59 |
| 级别 | 전체 / INFO / WARN / ERROR | 所有 |
左侧操作
| 按钮 | 操作 |
|---|---|
| ↻ 刷新(页面顶部) | log.search() — 以当前表单值重新查询 |
| 🔍 搜索(蓝色按钮,左侧面板右下角) | log.search() — 以表单值调用 /system/log/search |
左侧表单仅有搜索期限(日期范围选择器)+ 级别(下拉框)两个字段 — 与其他搜索页面(/ui/connect/list, /ui/point)共享相同的 pp-cell-pill 风格标签 / 圆角表单设计。
3. 右侧 — 日志列表(DataTables)
| # | 列 | 显示 |
|---|---|---|
| 1 | 时间 | timestamp.iso(精确到毫秒) — 居中显示,默认降序(最新在上) |
| 2 | 级别 | 圆角胶囊徽章(border-radius: 5px) — 🟦 INFO(蓝色实心) / 🟧 WARN(橙色实心) / 🟥 ERROR(红色实心)。 与其他页面(如 /ui/connect/list)的 pp-cell-pill 风格一致 |
| 3 | 消息 | 日志正文(长消息自动换行,点击可展开) |
每页大小:10 / 20 / 50 / 100 / 1000 可选(默认 100)。
右侧操作
| 按钮 | 操作 |
|---|---|
| ↻ 刷新 | log.list() |
| 🗑 全部删除 | log.truncate() — 确认对话框 → 全部删除(pe.app_system_log truncate)。 不可撤销 |
4. 常见模式
| 消息 / 级别 | 含义 / 下一步措施 |
|---|---|
ERROR [PLCDriverConnector] connection failed ... | PLC 连接失败。 检查 IP/端口/防火墙 |
ERROR [PLCValueReader] read failed at TAG_* | 检查该标签的地址 / 数据类型(格式) |
WARN [SchedulerStartListener] startup race detected | 非常罕见的启动竞态 — 再执行一次 restart.sh |
INFO [TAG_WRITE] OK opc_id=... tag_id=... value=... user_agent=... remote_ip=... | 正常的写入记录 — 用于审计。 remote_ip 默认为 RemoteAddr,启用反向代理时可设为 X-Forwarded-For 第一个 IP |
INFO [API_ACCESS] method=GET path=/api/v1/... status=200 ... | REST API 调用的单行审计(ApiAccessLogFilter) — 所有 /api/* 调用都会记录。 API 密钥用前缀4个字符 + 长度进行掩码 |
WARN [API_ACCESS] ... status=401 auth=none | 认证失败的调用 — 密钥缺失 |
WARN [API_ACCESS] ... status=401 auth=deprecated_query | 已弃用的 ?api_key= 查询认证尝试 — 需要切换到 头部/Bearer |
ERROR [Cassandra*] timeout / coordinator overload | 检查数据库负载 / 磁盘 / 堆。 node-info.sh |
INFO [SparkPlugSession] NBIRTH publish complete seq=0 | Sparkplug 正常重启 |
INFO [SparkPlugSession] DBIRTH publish complete devices=N | Sparkplug 设备出生 — N 个 OPC 发布了 birth |
5. 数据来源 / 调用的 API
| 操作 | API |
|---|---|
| 搜索 | GET /system/log/search(查询:s_date_range, level, ...) |
| 全部删除 | POST /system/log/truncate |
内部存储:Cassandra pe.app_system_log 表。 可单独设置 TTL(app.properties 的 system.log.ttl.days)。
6. 常见陷阱
| 症状 | 原因 / 解决方案 |
|---|---|
| 搜索结果为空 | 超出默认30天范围 / 被级别过滤器遗漏。 将期限改为 1年,级别改为所有 |
| 日志过多导致页面卡顿 | 将每页大小从 100 改为 20,或级别缩小至 ERROR |
| ERROR 数量与*系统错误(今日)*卡片上的数字不符 | 卡片统计的是今日 00:00 之后的 / 本页面的搜索范围是用户自定义的期限 |
| 执行全部删除后统计为 0 | 正常 — 在产生新的 ERROR 之前保持空状态 |
| 日志保留时间过长导致磁盘压力大 | 缩短 system.log.ttl.days / 结合使用 clean.sh 和 node-cleanup.sh |
7. 了解更多
- 系统日志的来源/存储位置: 监控(管理员/REST)
- 合并查看日志文件(catalina.out, cassandra/system.log): 诊断与巡检
- 追踪环境配置变更: Web UI 环境配置