功能特性
全局错误处理机制
自动错误捕获与可视化反馈系统
你在使用其他的一些视频解析工具时,可能会遇到指令偶尔报错,想第一时间知道是哪里炸了,可是你没有时间去排查,即使你有时间,也要进入服务器查看对应的上下文日志、调用栈等信息,才能定位问题,并把问题通过 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 拼回整张。