维护提醒

BWIKI 全站将于 9 月 3 日(全天)进行维护,期间无法编辑任何页面或发布新的评论。

全站通知:

模组:制作指南/APIs/Logging

来自星露谷物语维基
跳到导航 跳到搜索

模组:目录

监视接口(monitor API)对应于 this.Monitor 模组类,主要用于向控制台和日志文件写入消息。

日志

概览

您可以通过调用 this.Monitor.Log 并传入一个消息字符串和一个日志级别来记录消息。这些消息会出现在 SMAPI 控制台和日志文件中。

例如,下述代码

this.Monitor.Log("a trace message", LogLevel.Trace);
this.Monitor.Log("a debug message", LogLevel.Debug);
this.Monitor.Log("an info message", LogLevel.Info);
this.Monitor.Log("a warning message", LogLevel.Warn);
this.Monitor.Log("an error message", LogLevel.Error);

会产出一个日志条目,包括时间戳、日志级别、模组名称和消息:

[18:00:00 TRACE NameOfMod] a trace message
[18:00:00 DEBUG NameOfMod] a debug message
[18:00:00 INFO NameOfMod] an info message
[18:00:00 WARN NameOfMod] a warning message
[18:00:00 ERROR NameOfMod] an error message

尽管文本在日志文件中不会显示色彩,但是会在 SMAPI 控制台中显示色彩。

日志级别

日志级别是语义的(semantic),这就是说,级别文本能传达信息(例如 Trace 消息和 Error 消息,顾名思义,有所不同)。您应当使用最接近消息意图的日志级别:

级别 含义
Trace 跟踪信息,面向开发者,常常为低级别的故障排除细节。在他人向您发送其报错日志时较为有用。跟踪信息默认情况下不会出现在控制台窗口中(厨卫您使用的是 "SMAPI for developers"),但会写入日志文件。
Debug 用于解决问题的细节,可能于玩家有关。
Info 与玩家有关的信息。应当审慎使用此级别。
Warn 玩家应当注意的潜在问题。应当较少使用。
Error 提示哪里出错的消息。
Alert 一则重要消息,提示玩家需要进行某些操作(例如更新版本)。主要用于 SMAPI 自身,模组几乎总是不应当使用此级别。

LogOnce

LogOnce 使您能够像上面这样记录一则消息,但每次启动游戏仅记录一次。例如,您可以使用此方法来显示一个接口兼容性警告:

this.Monitor.LogOnce("Some Mod Name used the deprecated X API.", LogLevel.Warn);

冗余日志

您可以使得某一消息仅在 SMAPI 的冗余日志选项开启时才会被记入日志(对于 SMAPI 的 for developers 而言,则是显示在控制台中)。这主要用于在大多数情况下无需记录、但有时需要记录以便排除故障的诊断性信息。

有两种方法来使用它:

// log a TRACE message if verbose logging is enabled
this.Monitor.VerboseLog("This will only appear if verbose logging is enabled.");

// check the verbose option
if (this.Monitor.IsVerbose)
   this.Monitor("This will only appear if verbose logging is enabled.", LogLevel.Trace);

玩家可以向 smapi-internal/StardewModdingAPI.config.json 文件的 VerboseLogging 字段添加相应模组ID来启动荣誉日志。例如,下面代码开启了 SMAPI 和 Content Patcher 的冗余日志:

"VerboseLogging": [ "SMAPI", "Pathoschild.ContentPatcher" ],

问答

创建的日志文件在哪

日志会输出到游戏的 ErrorLogs 数据文件夹。参见 smapi.io/log 以了解如何找到日志文件。您也可以上传日志到此网页以分析之。即使没有错误,日志文件也会被创建和连续写入(因此,您不需要退出游戏就能查看目前为止的日志)。