Server Log Filter
Hide noisy server console lines from the MCDR console with configurable regex rules, without touching the server's own log file.
Installation command
!!MCDR plugin install server_log_filterAuthor
Repository
Synced at
...
Last update
...
Latest version
Total downloads
35
Back to catalogue
ServerLogFilter-v1.3.0.mcdr
Version
1.3.0
Date
October 4, 2026
Size
26.88 KiB
Downloads
3
MD5
c0a83d32e3b74ee862c691741c1c0c85SHA256
794e357dcc00437765ee03bf67de1fc324aaf05033dd1054be1249815f83b55cMCDR Plugin Dependencies
| Plugin ID | Requirement |
|---|---|
| mcdreforged | >=2.15.0 |
Python Package Requirements
| Python Package | Requirement |
|---|---|
none |
修复
五个「一处写错就满盘皆输」的地方。它们是同一个错误出现在不同位置:代码在同一条路径上
明确承诺了「单条出错不影响其他」,但 except 只接住了最常见的那个异常类型。其中两个会让
插件直接加载不了。
| # | 触发方式 | 原来只接 | 实际抛的 | 原来的后果 |
|---|---|---|---|---|
| 1 | config.json 存成 ANSI/GBK | OSError | UnicodeDecodeError | 插件不加载 |
| 2 | 规则写成 a{999999999999} | re.error | OverflowError | 插件不加载 |
| 3 | 规则里有上千层嵌套括号 | re.error | RecursionError | 插件不加载 |
| 4 | pattern_probe_timeout_ms 设成 0 | — | — | 所有规则被拒,还都报「有回溯风险」 |
| 5 | 译文里写 {a.b} | KeyError/IndexError/ValueError | AttributeError | 消息路径抛异常 |
| 6 | !!logfilter test + 锚定规则 | — | — | 对正确的规则报「不命中」 |
① 配置文件不是 UTF-8。 在中文 Windows 上用记事本存成「ANSI」就会这样,MCDR 自己也解析不了它。
现在按字节读取、显式解码,于是它成为第三种「配置写坏」,走上已有的备份 + 重建流程——
原文件逐字节保留在 config.json.old 里供你抄回:
· 具体原因:文件不是合法的 UTF-8 文本(常见原因:在 Windows 上用记事本以 ANSI/GBK 编码保存)
只把
except放宽是不对的:那样 MCDR 会直接用默认值覆盖文件,而这正是备份机制要防的丢失。
②③ 编译规则时抛的异常不止 re.error。 这条代码路径的承诺是「单条规则写错不影响其他规则」,
实际却是一个手滑的量化符就让 on_load 抛异常。现在这类规则和被跳过其他规则一样处理并上报。
④ 预算 0 毫秒意味着任何耗时都超支,于是每条规则都被判成「有灾难性回溯风险」——连纯字面量也不例外。 过滤静默失效,报错还把人往错误方向带。现在下限夹到 1 ms:真实规则在微秒级、危险模式在百毫秒级, 两边都分得清清楚楚。
⑤ 译文里的 {a.b} 是笔误,而语言文件的承诺是「坏模板原样输出、绝不抛异常」。
⑥ !!logfilter test 拿整行去匹配,而过滤器匹配的是已被 MCDR 剥掉前缀的正文。
管理员习惯整行复制,于是 ^Player \w+ joined 会被告知「不命中」,而它其实工作得好好的——
反而让人去改一条本来写对的规则。现在测试前先剥掉 [时间] [线程/级别]: 前缀,并在回复里说明它这么做了。
新增
!!logfilter 现在还会告诉你三件以前看不到的事:
- 当前语言,以及它是怎么来的:
语言:zh_cn(跟随 MCDR)/语言:zh_cn(配置指定)。 - 有几条规则被跳过了(正则写错、或触发回溯保护),只在大于 0 时显示。
- 每条规则上次命中的是第几个开服周期。这个值一直写在
state.json里,只是从来没显示过。
变更
- 版本号 1.2.2 → 1.3.0
- 语言文件新增 6 条消息(中文与英文同步)
- 顺手修掉一个较小的 bug:重载时那句「配置被打坏的原因」原来用旧语言生成,而整段播报用新语言, 于是同一条通知可能一半中文一半英文。
升级说明
无需改动任何配置。 六处修复都只在「配置、规则或取值写错」时才会显现,正常使用下的行为与 1.2.2 一致;
!!logfilter 多出来的几行只是补充信息。
性能
新增 benchmarks/bench_versions.py,可把任意两个 .mcdr 逐项对比(各自在独立子进程里 import)。
它报告的是多次分批里最快的一批而不是平均值——实测平均值在单条规则那档同一版本重复三次就能抖动约 20%,
足以把噪声当成回归。
v1.2.2 → v1.3.0,逐行开销(三次复跑的中位数):
| 规则数 | v1.2.2 | v1.3.0 | 差异 |
|---|---|---|---|
| 1 | 0.170 µs | 0.172 µs | +1.3% |
| 5 | 0.423 µs | 0.428 µs | +1.3% |
| 25 | 1.635 µs | 1.633 µs | −0.1% |
| 50 | 3.310 µs | 3.287 µs | −0.7% |
载入开销(编译 + 回溯探测,25 条规则 ≈ 0.022 ms)与模块冷导入同样没有变化。 所有差异都落在复跑噪声之内,这与预期一致:六处修复都在错误路径上,没有一处位于逐行循环里。
兼容性
最低 MCDR 版本仍为 2.15.0,未引入新的 MCDR API。已在 2.15.0 / 2.15.7 / 2.16.0 上实测通过; 2.13.0 / 2.14.1 仍由 MCDR 依赖检查干净拒绝。
测试
- 测试 208 → 221(单测 178 → 188,真机端到端 30 → 33);变异 28 → 33(33/33 全部被抓住)
- 三条新变异就是把某个
except改窄,要求测试必须变红 - 非 UTF-8 那条有真实 MCDR 端到端用例:喂进 GBK 字节,断言备份逐字节一致、插件照常加载、 过滤继续工作,并且报错点名 UTF-8 而不是误导性地怪「少了个逗号」
产物
| 文件 | 大小 | SHA256 |
|---|---|---|
ServerLogFilter-v1.3.0.mcdr | 27,526 B | 794e357dcc00437765ee03bf67de1fc324aaf05033dd1054be1249815f83b55c |
包内固定 7 个文件:mcdreforged.plugin.json、server_log_filter/__init__.py、server_log_filter/i18n.py、
server_log_filter/lang/en_us.json、server_log_filter/lang/zh_cn.json、CHANGELOG.md、LICENSE
(三个 README 都不打包)。
相比 v1.2.2 的 25,739 B 增加约 1.8 KB,来自新增测试所需的代码、6 条新语言消息,以及 !!logfilter
多输出的三行。这是功能与健壮性的代价,不是性能开销。