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
44
Back to catalogue
ServerLogFilter-v1.1.0.mcdr
Version
1.1.0
Date
October 4, 2026
Size
27.80 KiB
Downloads
3
MD5
2e8991f7680afadb57cb92ca2f40bf0eSHA256
47caab8924d41d181a4dc2a056565fec471517812466bcaef9b6f203092c1c2aMCDR Plugin Dependencies
| Plugin ID | Requirement |
|---|---|
| mcdreforged | >=2.15.0 |
Python Package Requirements
| Python Package | Requirement |
|---|---|
none |
新增:零命中规则提醒 + 灾难性回溯防护
这一版加了两样东西,目标都是同一个:让过滤配置保持干净,同时不把插件变重。
1. 零命中规则提醒
某条规则如果连续若干个开服周期一次都没命中,它多半已经没用了——要么是正则写错,
要么是它要过滤的那段日志已经不再产生。达到阈值后,插件会在下一次开服完成
(服务端打印 Done)之后给出一次提醒,不会被淹没在开服日志里:
==================================================================
[ServerLogFilter] 注意:有 1 条过滤规则连续 3 次及以上开服都没有命中
· standing on air - force-sending blocks below
已连续 3 次开服零命中;自启用以来从未命中过
通常只有两种可能:
1. 这条正则写错了(拼写 / 大小写 / 转义,或与当前服务端版本不匹配)
2. 这段日志已经不再产生(例如上游 bug 已被修复)
建议:用 !!logfilter test <一行日志> 验证规则是否还匹配;
确认无用后从配置的 patterns 里删除该条,
若确认只是「本来就罕见」可调大 stale_rule_threshold,
或用 !!logfilter reset 清空计数重新观察。
==================================================================
- 新配置:
warn_about_stale_rules(默认true)、stale_rule_threshold(默认3,设0关闭) - 统计写在
config/server_log_filter/state.json,与你自己维护的config.json分开, 插件不会改动后者 - 新命令:
!!logfilter reset(admin),清空连续零命中计数重新观察 !!logfilter的状态输出里会标出每条规则的连续零命中次数
两个容易被忽略、但关系到提醒是否可信的保护:
- 只统计「真正完成过启动」的周期。 否则服务端连续几次启动失败(比如 mod 报错) 会把所有规则刷成零命中,提醒就变成误导。
- 热重载会接续统计。
!!MCDR reload plugin时,命中次数与「本周期的启动已完成」 标记都会被带到新实例,一个正常命中的周期不会被切成两段而误判成零命中。
2. 灾难性回溯防护
真正的性能风险不是规则条数,而是写坏的正则。带嵌套量词的表达式在匹配失败时 回溯是指数级的,实测单一行:
| 模式 | 输入长度 | 单行耗时 |
|---|---|---|
(a+)+$ | 22 | 188 ms |
(a+)+$ | 27 | 3.0 秒 |
| `^(a | a)*$` | 25 |
足以冻结 MCDR 主线程。现在载入时会用几个很短的探测串试跑每条规则,超预算的规则 会被跳过并给出明确报错:
- 新配置:
validate_patterns(默认true)、pattern_probe_timeout_ms(默认25) - 参数是标定出来的:4 类常见危险写法在探测串上耗时 190~380 ms,全部被拦下; 8 种真实写法最坏仅几微秒——余量约 9000 倍,不会误伤正常规则
关于「性能」的一句实话
上面第 1 项功能常被期待能「减少过滤带来的性能负担」。实测数据不支持这个说法, 所以文档里没有这样写:
| 规则数 | 单行耗时 | 1000 行/秒时 CPU 占用 |
|---|---|---|
| 1 条 | 0.19 µs | 0.019% |
| 5 条 | 0.45 µs | 0.045% |
| 25 条 | 1.70 µs | 0.17% |
对照:MCDR 自己解析同一行要 2.13 µs,本插件只占其中约 9%。 即便按 1000 行/秒的极端突发(真实小服通常 10~100 行/秒),每小时累计也只有 0.67 秒。 删掉一条用不到的规则所省下的时间,远低于测量噪声。
所以这个功能的价值是配置卫生——尽早发现写错的规则、以及发现「已经没必要再过滤了」的规则。 真正会拖慢服务端的是上面第 2 项处理的问题。
以上数字都可用仓库里的 benchmarks/bench_filter.py 自行复现。
兼容性
最低 MCDR 版本要求没有变化,仍是 2.15.0。
本次功能用到的 API(save_config_simple、带 file_name 的 load_config_simple、
嵌套 Serializable、on_server_startup)经逐版本检查,自 MCDR 2.13.0 起就全部存在;
门槛仍只由 InfoActionFlag(2.15.0 才引入)决定。
| MCDR 版本 | 结果 |
|---|---|
| 2.13.0 / 2.14.1 | 仍由 MCDR 原生依赖检查明确拦截:依赖项 [email protected] 不满足版本约束 >=2.15.0 |
| 2.15.0(最低支持) | 加载、过滤、零命中提醒、状态文件、命令(含 !!logfilter reset)全部实测通过 |
| 2.15.7 / 2.16.0 | 同上,全部通过 |
在 2.15.0 / 2.15.7 / 2.16.0 上,12 项检查逐项一致(提醒出现时机、提醒内容、
session_index 与连续零命中计数的推进、状态文件写入、命令树注册),零运行时异常。
Minecraft 侧结论不变:过滤在 MCDR 侧完成,与 MC 版本无耦合。
安装
下载下方的 ServerLogFilter-v1.1.0.mcdr,放进 MCDR 实例的 plugins/ 目录即可;
运行中的实例可用 !!MCDR reload plugin server_log_filter 热重载。
首次启动会生成配置文件 config/server_log_filter/config.json,新增的字段会自动补齐默认值,
原有配置无需改动。
SHA256:47caab8924d41d181a4dc2a056565fec471517812466bcaef9b6f203092c1c2a