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

135

Back to catalogue

MCDR-ServerLogFilter

语言 / Language: 简体中文 | English

一个 MCDReforged 插件:把服务端反复刷屏的日志行只从 MCDR 控制台隐去;服务端自己的日志文件一条不少。

MCDR License Python

插件 IDserver_log_filter
命令!!logfilter / !!lf
需要MCDR 2.15.0+(实测 2.15.0 / 2.15.7 / 2.16.0;与 MC 版本无关)
LicenseMIT

想改代码,或了解打包、测试与版本兼容性?见 docs/DEVELOPMENT.md。

目录

功能

  • 按正则规则过滤服务端输出,命中的行只从 MCDR 控制台隐去;服务端自己写的 server/logs/latest.log 一条不少
  • 隐去的是控制台回显、不是丢弃:日志事件照常分发,不影响其它插件与 MCDR 的「开服完成 / 关服 / 玩家进出」判断
  • 默认规则针对 Minecraft 26.3 的「standing on air」刷屏日志(官方误报,Mojira MC-311474 / MC-311727)
  • 规则随时可增删改;!!logfilter test <文本> 先验证再启用,不必等它真的触发
  • 规则连续多个开服周期零命中时提醒一次;载入时拦截有灾难性回溯风险的规则(跳过并警告,其余规则不受影响)
  • 配置写坏会先备份成 config.json.old 再重建;插件升级后新增选项自动补齐,你已有的取值不受影响
  • 中英双语;命令全部需要管理员权限

安装

  1. 从 Releases 下载 ServerLogFilter-vX.Y.Z.mcdr,或自行打包(见 docs/DEVELOPMENT.md);
  2. 放进 MCDR 的 plugins/ 目录;
  3. MCDR 运行中执行 !!MCDR reload plugin server_log_filter,未运行则直接开服;
  4. 首次启动自动生成 config/server_log_filter/config.json,默认配置开箱可用。

多个子服各放一份,配置互相独立。

命令

!!logfilter 与 !!lf 完全等价。所有命令都需要 MCDR 管理员权限(与游戏内 OP 无关:MCDR 只认自己的 permission.yml,未登记的玩家默认是 user)。给自己权限:在 MCDR 控制台执行 !!MCDR permission set <你的 ID> admin。

命令作用
!!logfilter(= !!logfilter help)帮助页(游戏内聊天里每行可点击)
!!logfilter list状态:当前语言与来源、每条规则的命中次数与连续零命中次数、被跳过的规则数
!!logfilter test <文本>测试一行日志是否会被隐去、命中的是哪条规则;整行粘贴也行(会按 MCDR 的规则剥掉 [时间] [线程/级别]: 前缀,以及玩家发言的 <玩家名> 前缀)
!!logfilter reload重读配置立即生效,不必重启;已从配置中删除的规则的统计同时清除
!!logfilter reset清空「连续零命中」计数,重新开始观察

配置

配置文件是 config/server_log_filter/config.json,首次加载自动生成:

{
    "language": "auto",
    "patterns": [
        "standing on air - force-sending blocks below"
    ],
    "log_matched_lines": false,
    "report_on_server_stop": true,
    "warn_about_stale_rules": true,
    "stale_rule_threshold": 3,
    "validate_patterns": true,
    "pattern_probe_timeout_ms": 25,
    "announce_broken_config": true
}
展开选项与说明
字段类型默认说明
languagestring"auto"消息语言。auto 跟随 MCDR;也可写 zh_cn / en_us(大小写与 - / _ 随意;zh_tw 回落到 zh_cn,缺失的档位回落到 en_us)
patternsstring[]见上正则规则。对每行日志的正文(MCDR 已剥掉 [时间] [线程/级别]: 前缀)做匹配,命中即隐去
log_matched_linesboolfalse调试用:把被隐去的行以 INFO 级别写进 MCDR 日志,方便确认规则生效
report_on_server_stopbooltrue关服时在 MCDR 日志里汇总本次共隐去多少行
warn_about_stale_rulesbooltrue某条规则连续多个开服周期零命中时提醒一次(只在成功开服的周期上计数)
stale_rule_thresholdint3连续多少个开服周期零命中才提醒;0 = 关闭这项提醒
validate_patternsbooltrue载入时用短探测串检查灾难性回溯,把这类规则拦下并跳过
pattern_probe_timeout_msint25上项检查里单个探测串的耗时上限(毫秒):只影响插件加载与 !!logfilter reload 的耗时,与逐行过滤的开销无关(正常规则每行约 1 µs)。小于 1 按 1、大于 2000 按 2000,被钳制时在日志里 warning 一次。这个检查是启发式,拦不住所有病态正则(增长比低于阈值、或只在超长输入上才爆发的模式),详见 docs/DEVELOPMENT.md
announce_broken_configbooltrue配置写坏被备份并重置时,在控制台说明原因与备份路径

匹配方式是 re.search(包含匹配),不是全匹配。 写 standing on air 就能命中整行,不必加 .*;反过来 . 匹配任意字符,要匹配字面点号请写 \.。

加规则:把日志正文追加进 patterns(其余字段保持原值),先 !!logfilter test <文本> 验证,再 !!logfilter reload:

{
    "patterns": [
        "standing on air - force-sending blocks below",
        "Ignoring chat session from .* due to missing Services public key"
    ]
}

几条说明:

  • 规则编译失败只会跳过该条并在日志里警告,其余规则照常工作;想临时关掉过滤,把 patterns 清空再 !!logfilter reload。
  • 零命中统计存在 state.json(与 config.json 分开,插件不会改你写的配置);从配置里删掉规则,它的统计在 reload 时一并清除。
  • 写坏配置时,原文件先被改名成 config.json.old 再重建默认配置(备份只有这一个位置);文件不是 UTF-8 编码(比如被存成 ANSI)也算写坏。
  • warn_about_stale_rules / announce_broken_config 两个播报开关只管说不说:备份、统计这些动作照旧执行。升级后新增的选项由 MCDR 自己补进配置文件(不播报)。
  • 想加一门语言:复制 en_us.json 改成 <语言代码>.json、只翻译取值,见 server_log_filter/lang/README.md(不需要改代码)。

注意

  • 过滤在 MCDR 这一侧完成(对服务端输出逐行匹配),与 MC 版本无关;默认规则只对 MC 26.3 的日志有意义,装在其它版本上插件照常工作,只是默认规则不会命中。
  • 规则别写得太宽(如 .、.*、^),否则控制台会看起来像「服务端没在运行」;加载时有警告,!!logfilter list 里也会标出。
  • 查完整原始日志,永远看 server/logs/latest.log。

License

MIT

README source: https://raw.githubusercontent.com/Pau1am/MCDR-ServerLogFilter/main/README.md