日志文件
当你在调试服务器、寻找什么出错时日志文件是必不可少的部分。本页面将简要介绍 SpongeForge 及 SpongeVanilla 服务器产生的日志文件。
配置日志记录
有些时候插件会产生服主不需要的日志,甚至会让需要的信息淹没在其他日志中。有些时候,插件或服务区需要输出平时根本不会产生的调试日志。这一部分将解释如何配置日志记录。将日志分割到多个文件中也是可能的。你可以为服务器 OP 配置出用于监视用户活动和行为的日志,然后为服务器管理配置出监视插件工作状态的日志。
注解
如果你觉得某个插件的日志太多了,或者日志级别有问题,请反馈给对应的插件作者。
最简单的配置日志记录的方式是修改 Minecraft 和/或 Forge 使用的 log4j2.xml
配置文件。你可以通过解压 forge-...-universal.jar
和 minecraft_server.jar
并在解压出的文件夹的根目录下找到这个文件。不要直接编辑 jar 里的文件。
你可以通过在启动脚本中添加一个参数来告知 log4j2 使用你的新配置文件。
java -Dlog4j.configurationFile=log4j2_server.xml -jar server.jar
默认的配置文件大致是这个样子的:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" packages="com.mojang.util,net.minecraftforge.server.console.log4j">
<Appenders>
<TerminalConsole name="Console">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level] [%logger]: %msg%n"/>
</TerminalConsole>
<RollingRandomAccessFile name="DebugFile" fileName="logs/debug.log" filePattern="logs/debug-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level] [%logger]: %msg%n"/>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="200MB"/>
</Policies>
<DefaultRolloverStrategy max="5" fileIndex="min"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Logger level="info" name="org.spongepowered"/>
<Logger level="info" name="com.example.mod"/>
<Root level="all">
<AppenderRef ref="Console" level="info"/>
<AppenderRef ref="DebugFile"/>
</Root>
</Loggers>
</Configuration>
注解
这个例子中没有原始配置文件的注释,所以请务必阅读并理解这些配置选项的含义。
Appenders
部分定义了日志消息的输出频道,这可以是某个文件,或是终端,甚至是某个中心化的日志集合或分析服务器。更多关于 Appenders 的信息可在这里找到。
Loggers
部分定义了 logger 的过滤器,及日志消息的转发目标。通常,如果你需要屏蔽某些消息,需要编辑这一部分。让我们来进一步分析一下:
<Logger level="info" name="com.example.mod"/>
这将限制 com.example.mod
的日志输出为仅限 info
或更高级别的消息。要注意,这个设定将影响所有的日志输出频道及所有隶属于其子包下的 logger。关于过滤器的更多信息可在这里找到。
<Root level="all">
<AppenderRef ref="Console" level="info"/>
<AppenderRef ref="DebugFile"/>
</Root>
这一部分配置了两个日志输出频道:一个名为 Console
的 Appender 仅输出 info
或更高级的日志,以及一个名为 DebugFile
的 Appender。建议保留至少一个持久化保存日志的 logger 以供以后查错时使用。
注解
如果你在寻找你的插件的日志消息不显示的原因:终端的日志只输出等级至少为 info 的日志,debug 日志默认是隐藏的。
如果你不想重新配置整个日志记录,但想隐藏某些插件的日志,你可以使用组合日志配置。你可以通过引用原始的日志记录配置并加上你需要的选项来达成这一效果。就像这样:
java -Dlog4j.configurationFile=log4j2_server.xml,log4j2_custom.xml -jar server.jar
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Loggers>
<Logger name="com.example.logspammer" level="off"/>
</Loggers>
</Configuration>
在这个例子中,所有 com.example.logspammer
包下的 logger 产生的日志都不会显示或保存。为方便调试,你可以选择让你的插件的日志显示在终端中,这样就不用反复查阅日志的尾部了(译注:原文为 tail
——一个 Unix 下的实用程序,用于显示文件结尾的内容)。就像下面这样:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Loggers>
<Logger name="com.example.newplugin" level="all" additivity="false">
<AppenderRef ref="Console"/>
[...]
</Logger>
</Loggers>
</Configuration>
小技巧
日志记录会影响性能。记录大量日志可能会对 TPS 产生小幅影响。但与此同时,没有或缺少日志的时候,重现某个错误会更困难。
SpongeForge 日志文件
SpongeForge 会在服务器根目录的 /logs
文件夹下输出若干日志文件。在 Forge 1.12.2 - 14.23.4.2705 环境下,有这些:
debug.log
latest.log
debug.log
注解
此处有几个示例行。若要阅读完整的示例日志,请单击 SpongeForge 1.12.2 - 7.1.0-BETA-3126 debug.log 文件
[main/INFO] [FML]: Forge Mod Loader version 14.23.4.2705 for Minecraft 1.12.2 loading
[main/INFO] [FML]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_162, running on Windows 10:amd64:10.0, installed at C:\Program Files\Java\jre1.8.0_162
[main/DEBUG] [FML]: Java classpath at launch is:
[main/DEBUG] [FML]: forge-1.12.2-14.23.4.2705-universal.jar
[main/DEBUG] [FML]: Java library path at launch is:
[main/DEBUG] [FML]: C:\ProgramData\Oracle\Java\javapath
日志表明了运行环境:
Forge 14.23.4.2705(构建 #2705)
Java 8u162(64 位)
Windows 10 x64
Java 的安装目录
警告
要运行 Sponge,你必须使用 Java 8u20 或更高版本。Sponge 不支持旧版本 Java 及诸如 Java 9 或 Java 10 的新版 Java。
[main/DEBUG] [FML]: Examining for coremod candidacy spongeforge-1.12.2-2705-7.1.0-BETA-3136.jar
[main/INFO] [FML]: Loading tweaker org.spongepowered.asm.launch.MixinTweaker from spongeforge-1.12.2-2705-7.1.0-BETA-3136.jar
这表明 SpongeForge 3136 已经被 Forge 发现和加载。为进一步帮助有关 SpongeForge 的命名方案,看看这里:读懂文件名。
latest.log
注解
此处有几个示例行。若要阅读完整的示例日志,请单击 SpongeForge 1521 latest.log
这是你会在 Minecraft 服务器界面看到的输出。
SpongeVanilla 日志文件
latest.log
注解
此处有几个示例行。若要阅读完整的示例日志,请单击 SpongeVanilla 1.12.2-7.1.0-BETA-54 latest.log
这是你会在 Minecraft 服务器界面看到的输出。
解读日志文件
如果你不知道如何阅读常见的崩溃报告,你会在这里得到帮助,但首先我们需要崩溃报告。在这段简单介绍中,我们直接用调试这一章节中提到的范例来讲解:因 SpongeForge 构建版本过旧而引发的崩溃中产生的崩溃报告
。
WARNING: coremods are present:
SpongeCoremod (sponge-1.8-1499-2.1DEV-575.jar)
Contact their authors BEFORE contacting forge
您会注意到的第一件事情是 Coremods 存在的 Warning 。不过这没什么可担心的,这不是错误,只是警告联系 Sponge 技术支持,而不是 Forge 。
java.lang.NoClassDefFoundError: org/spongepowered/api/event/game/state/GameStartingServerEvent
后面的几行才是真正描述错误的位置。这里它是 NoClassDefFoundError
。如果你不太清楚这个是什么意思,你可以先看看我们的 调试 页面。如果这个错误很常见,那么它会被列在那里。如果它没有被列在那里,你可以寻求论坛的帮助!当然先确保你提供了完整的崩溃报告。
幸运的是您系统的详细信息都包含在崩溃报告的底部︰
Minecraft Version: 1.8
Operating System: Windows 8.1 (amd64) version 6.3
Java Version: 1.8.0_51, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 515666256 bytes (491 MB) / 782761984 bytes (746 MB) up to 1847590912 bytes (1762 MB)
JVM Flags: 0 total;
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.10 FML v8.0.99.99 Minecraft Forge 11.14.3.1521 5 mods loaded, 5 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UC mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
UC FML{8.0.99.99} [Forge Mod Loader] (forge.jar)
UC Forge{11.14.3.1521} [Minecraft Forge] (forge.jar)
UC Sponge{1.8-1499-2.1DEV-575} [SpongeForge] (minecraft.jar)
U Core{unknown} [Core Plugin] (Core.jar)
Loaded coremods (and transformers):
SpongeCoremod (sponge-1.8-1499-2.1DEV-575.jar)
这代表了:
游戏本体为 Minecraft 1.8,安装有 Forge 1521
Java 运行时为 Java 8 Update 51,64 位版本
安装有 2 个其他 Mod
安装有 SpongeForge 1.8-1499-2.1DEV-575(即构建 #575)
名为 Core 的 Mod
注解
注意,剩下的三个 Mod(mcp、FML、Forge)是所有基于 Forge 的服务器都一定会有的 Mod。
现在可以作出以下假设:
可能是插件导致服务器崩溃
SpongeForge 需要的版本与当前Forge版本不同︰ 需要版本 1499,安装了 1521
如果你想知道如何解决问题,请参考:调试。
常见错误
参阅 调试 可以找到常见错误。