众所周知,Minecraft服务器的控制台的输出都会被保存到服务器目录下的/logs路径,如果有些不必要的信息频繁输出,会导致日志文件非常巨大并影响到控制台的使用

前阵子,我在某Linux服务器上运行Minecraft服务器时,遇到了一个很奇怪的报错,来自io.netty这个库,每秒钟会报一次Accept()函数失败的WARN级别错误。经过诊断这个报错是服务器的问题且不影响服务器运行,但是导致了我的日志被这个报错填满了

1.21.4 Paper 报错

在尝试了无数失败的屏蔽方式并在GPT老师的帮助下,最后找到了解决方法:

高版本 Paper服务端

此处例子是1.21.4版本的Paper纯净核心

首先到Paper的开源库找到对应版本的log4j2.xml文件,比如最新版本的

然后将这个文件放到一个方便的位置,比如服务器根目录

在文件最后的Loggers章节内进行如下修改,在自带的Root标签上方添加一个Logger标签 将你需要屏蔽的插件/管道名写到name=””里面,这个名字可以在报错里看到。比如我上面报错中开头就是warn: [io.netty…..]

<Loggers>
<Logger name=”io.netty” level=”OFF” additivity=”false”>
<AppenderRef ref=”Async”/>
</Logger>
<Root level=”INFO”>
<filters>
<MarkerFilter marker=”NETWORK_PACKETS” onMatch=”DENY” onMismatch=”NEUTRAL” />
</filters>
<AppenderRef ref=”Async”/>
</Root>
</Loggers>

最后在启动脚本或启动指令中加入一个参数,让服务端通过你修改过的配置文件启动Log4j2即可

-Dlog4j.configurationFile=log4j2.xml
低版本 Forge服务端

因为是服务器问题,这个报错我在开启另一个1.12.2版本的模组服(Forge核心)时也遇到了

在尝试过上文的同样方法后发现没有办法成功屏蔽,经过GPT老师提醒得知早期的服务端报错信息可能并不是由Log4j2管理的,于是有了另一个解决方法:直接修改用来开启服务器的JDK/JRE所在的文件的配置文件

在本次的例子中,使用的是来自openlogic的Java8-JDK。在  java根目录/jre/lib 路径下找到 logging.properties 文件,在最下方添加一行代码即可

io.netty.level = OFF
结束

其它版本的服务端核心可能有些许不同,如果无法生效请以此为参考自行探索~