Server Log Filter

Hide noisy server console lines from the MCDR console with configurable regex rules, without touching the server's own log file.

management

Installation command

!!MCDR plugin install server_log_filter

Author

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

c0a83d32e3b74ee862c691741c1c0c85

SHA256

794e357dcc00437765ee03bf67de1fc324aaf05033dd1054be1249815f83b55c

MCDR Plugin Dependencies

Plugin IDRequirement
mcdreforged>=2.15.0

Python Package Requirements

Python PackageRequirement

none

修复

五个「一处写错就满盘皆输」的地方。它们是同一个错误出现在不同位置:代码在同一条路径上 明确承诺了「单条出错不影响其他」,但 except 只接住了最常见的那个异常类型。其中两个会让 插件直接加载不了。

#触发方式原来只接实际抛的原来的后果
1config.json 存成 ANSI/GBKOSErrorUnicodeDecodeError插件不加载
2规则写成 a{999999999999}re.errorOverflowError插件不加载
3规则里有上千层嵌套括号re.errorRecursionError插件不加载
4pattern_probe_timeout_ms 设成 0——所有规则被拒,还都报「有回溯风险」
5译文里写 {a.b}KeyError/IndexError/ValueErrorAttributeError消息路径抛异常
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.2v1.3.0差异
10.170 µs0.172 µs+1.3%
50.423 µs0.428 µs+1.3%
251.635 µs1.633 µs−0.1%
503.310 µs3.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.mcdr27,526 B794e357dcc00437765ee03bf67de1fc324aaf05033dd1054be1249815f83b55c

包内固定 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 多输出的三行。这是功能与健壮性的代价,不是性能开销。