在Log4j中过滤Minecraft服务器Jar包输出的指定控制台异常
解决Minecraft服务器屏蔽
com.mojang.brigadier.exceptions.CommandSyntaxException异常日志的方法 一、正确的Jar包启动参数
Minecraft服务器使用的是Log4j 2,你之前用的-Dlog4j.configuration是旧版Log4j 1.x的参数,这是配置无效的核心原因之一。替换为Log4j 2的专用参数即可:
java -Dlog4j.configurationFile=/home/container/console.xml -Xms128M -XX:MaxRAMPercentage=95.0 -jar server.jar
- 若不需要调试Log4j自身,可去掉
-Dlog4j.debug参数,减少冗余输出
二、正确的Log4j 2 XML配置文件
你之前的配置仅包含Appenders节点,缺少Log4j必需的Configuration根节点和Loggers映射规则,导致配置完全不生效。以下是完整的可生效配置:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <!-- 控制台输出:屏蔽目标异常,保留其他正常日志 --> <Console name="Console" target="SYSTEM_OUT"> <RegexFilter regex=".*com\.mojang\.brigadier\.exceptions\.CommandSyntaxException.*" onMatch="DENY" onMismatch="ACCEPT"/> <PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n"/> </Console> <!-- 可选:日志文件输出,保留完整日志用于排查问题 --> <File name="LogFile" fileName="logs/latest.log"> <PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n"/> </File> </Appenders> <Loggers> <!-- 根日志器:关联控制台和文件输出 --> <Root level="info"> <AppenderRef ref="Console"/> <AppenderRef ref="LogFile"/> </Root> <!-- 进阶优化:若明确是某插件导致异常,可直接限制该插件日志级别 --> <!-- <Logger name="插件完整包名" level="error" additivity="false"> <AppenderRef ref="Console"/> </Logger> --> </Loggers> </Configuration>
配置关键说明
RegexFilter:通过正则精准匹配包含目标异常类的日志行,onMatch="DENY"表示匹配到的日志直接拒绝输出,onMismatch="ACCEPT"保证其他正常日志正常显示- 保留文件日志输出是为了后续排查问题,若不需要可直接删除
<File>节点和对应的<AppenderRef ref="LogFile"/> - 若知道触发异常的插件包名,使用注释中的
Logger配置可以更精准地限制日志输出,比正则过滤效率更高
内容的提问来源于stack exchange,提问作者OnlyTheBest
相关产品推荐
相关产品推荐

