功能特性

全局错误处理机制

自动错误捕获与可视化反馈系统

你在使用其他的一些视频解析工具时,可能会遇到指令偶尔报错,想第一时间知道是哪里炸了,可是你没有时间去排查,即使你有时间,也要进入服务器查看对应的上下文日志、调用栈等信息,才能定位问题,并把问题通过 GitHub Issue 或者聊天群反馈给开发者。

本页解决了以下生产环境中的痛点:

凡是由本插件的指令执行出错时,会自动捕获异常信息并渲染错误图片反馈给触发者或者主人(发给谁由插件配置里的 errorLogSendTo 控制,默认只发给主人),并且附带上详细的下文和调用栈所打印的 Debug 等级日志。

架构概览

机制特性

错误处理包装器

用 wrapWithErrorHandler 包装指令处理函数,出错时自动渲染错误图片。

下面的示例来自插件源码,框架相关的 import 已省略:业务代码通过插件内的 src/compat/ 调用框架接口,与上游保持一致。


const  = (
  async () => {
    // 业务逻辑,异常会被自动捕获
    return true
  },
  { : '功能名称' }
)

包装好的处理函数交给指令注册处即可。Koishi 的指令名直接写 解析、弹幕解析 这样的名字,不带 # 前缀。

上下文日志追踪

插件内的 logger 提供了 runContext:执行期间产生的日志会被逐条收集,出错时连同调用栈一起渲染进错误图片,不必再登录服务器翻日志文件。

const  = logger.runContext(async () => {
  /* 业务逻辑 */
})
await .run()
const  = .logs() // 获取执行期间的日志

错误图片示例

图片包含:错误类型、调用栈、业务名称、触发指令、执行日志、框架版本(即 Koishi 的版本)、插件版本与适配器名称。卡片过长时会自动切片,再用一条 markdown 拼回整张。