🟡 [M11] LogLevel::from_str 不 trim 空白 #21

Closed
opened 2026-06-03 13:53:57 +08:00 by dailz · 1 comment
Owner

文件: core/types.rs:73-91
分类: 解析

问题: LogLevel::from_str 不 trim 空白," INFO ""ERROR\n" 被解析为 Unknown

建议修复: match s.trim().to_uppercase().as_str()

**文件**: `core/types.rs:73-91` **分类**: 解析 **问题**: `LogLevel::from_str` 不 trim 空白,`" INFO "` 或 `"ERROR\n"` 被解析为 `Unknown`。 **建议修复**: `match s.trim().to_uppercase().as_str()`。
dailz added the bugarea/parserseverity/medium labels 2026-06-03 13:53:57 +08:00
Author
Owner

修复方案

根因: LogLevel::from_str (crates/core/src/types.rs) 使用 s.to_uppercase() 直接匹配,未对输入做 trim() 处理。JSON 日志路径中 serde 保留字段原始值(含前后空白),导致 " WARN " 被错误归类为 Unknown(" WARN ")

修复: 在 FromStr 实现入口添加 s.trim(),同时对 Unknown 变体存储 trimmed 后的值。

改动文件:

  • crates/core/src/types.rsfrom_strtrim(),更新注释
  • crates/core/src/parser/json.rs — 新增回归测试

新增测试:

  • test_from_str_whitespace_trimmed — 前后空白不影响已知级别解析
  • test_from_str_whitespace_unknown_trimmed — Unknown 存 trimmed 值、纯空白→Unknown("")、内部空白不误匹配
  • test_level_whitespace_in_json — JSON {"level":" WARN "} 端到端验证

验证: workspace 全量测试 330 passed, 0 failed

提交: ef18897

## 修复方案 **根因**: `LogLevel::from_str` (`crates/core/src/types.rs`) 使用 `s.to_uppercase()` 直接匹配,未对输入做 `trim()` 处理。JSON 日志路径中 serde 保留字段原始值(含前后空白),导致 `" WARN "` 被错误归类为 `Unknown(" WARN ")`。 **修复**: 在 `FromStr` 实现入口添加 `s.trim()`,同时对 `Unknown` 变体存储 trimmed 后的值。 **改动文件**: - `crates/core/src/types.rs` — `from_str` 加 `trim()`,更新注释 - `crates/core/src/parser/json.rs` — 新增回归测试 **新增测试**: - `test_from_str_whitespace_trimmed` — 前后空白不影响已知级别解析 - `test_from_str_whitespace_unknown_trimmed` — Unknown 存 trimmed 值、纯空白→`Unknown("")`、内部空白不误匹配 - `test_level_whitespace_in_json` — JSON `{"level":" WARN "}` 端到端验证 **验证**: workspace 全量测试 330 passed, 0 failed **提交**: ef18897
dailz closed this issue 2026-06-10 13:37:33 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dailz/logViewer#21