如何在 SpacetimeDB 模块中写日志并用 CLI 查看 📅 发布时间:2026/9/13 20:37:50 👁 浏览次数: 如何在 SpacetimeDB 模块中写日志并用 CLI 查看【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB当你在 SpacetimeDB 模块里写了业务逻辑reducer之后调试时往往需要看运行时的输出。SpacetimeDB 为模块提供了日志能力在 reducer 中按各语言的标准方式写日志再用spacetime logs命令从数据库端查看。日志对数据库私有只有数据库属主可见客户端看不到。本文的主路径使用 Rust 模块TypeScript 和 C# 作为可选分支给出所有代码取自项目文档。在 reducer 中写日志Rust主路径Rust 模块使用logcrate 写日志在 reducer 函数体内调用即可use spacetimedb::{reducer, ReducerContext}; #[reducer] pub fn process_data(ctx: ReducerContext, value: u32) - Result(), String { log::info!(Processing data with value: {}, value); if value 100 { log::warn!(Value {} exceeds threshold, value); } if value 0 { log::error!(Invalid value: 0); return Err(Value cannot be zero.to_string()); } log::debug!(Debug information: ctx.sender {:?}, ctx.sender()); Ok(()) }可用的日志宏及用途log::error!()— 错误消息log::warn!()— 警告消息log::info!()— 一般信息log::debug!()— 调试消息log::trace!()— 更细粒度的跟踪消息写日志时建议带上上下文。文档给出的 Rust 示例use spacetimedb::log; #[reducer] pub fn transfer_credits(ctx: ReducerContext, to_user: u64, amount: u32) - Result(), String { log::info!( Credit transfer: from{:?}, to{}, amount{}, ctx.sender(), to_user, amount ); // ... transfer logic Ok(()) }TypeScript 与 C#可选分支TypeScript 模块直接写标准consoleAPISpacetimeDB 会自动把这些调用路由到内部日志系统import { schema, t } from spacetimedb/server; const spacetimedb schema({ /* tables */ }); export default spacetimedb; export const processData spacetimedb.reducer({ value: t.u32() }, (ctx, { value }) { console.log(Processing data with value: ${value}); if (value 100) { console.warn(Value ${value} exceeds threshold); } if (value 0) { console.error(Invalid value: 0); throw new Error(Value cannot be zero); } console.debug(Debug information: ctx.sender ${ctx.sender}); });可用方法为console.error()、console.warn()、console.log()、console.debug()。C# 模块使用SpacetimeDB.Log类using SpacetimeDB; public static partial class Module { [SpacetimeDB.Reducer] public static void ProcessData(ReducerContext ctx, uint value) { Log.Info($Processing data with value: {value}); if (value 100) { Log.Warn($Value {value} exceeds threshold); } if (value 0) { Log.Error(Invalid value: 0); throw new ArgumentException(Value cannot be zero); } Log.Debug($Debug information: ctx.Sender {ctx.Sender}); } }可用方法为Log.Error()、Log.Warn()、Log.Info()、Log.Debug()、Log.Trace()。各语言级别的对应关系error、warn、info、debug 是共通的C#、Rust 和 C 额外提供 trace/panic 级别TypeScript 没有 trace 级别。发布模块并触发一次 reducer日志只有在 reducer 实际执行后才会产生所以查看日志前需要先把模块发布到数据库。文档给出的发布命令spacetime publish database其中database是你要发布到的数据库名或 identity需匹配正则/^[a-z0-9](-[a-z0-9])*$/小写字母、数字用连字符分隔。如果你用的是开发模式spacetime dev它会在文件变更时自动重新生成客户端绑定、重新构建并自动发布日志查看方式不变。发布后调用一次模块里写了日志的 reducer例如调用文档示例中的process_dataspacetime call database process_data注意文档明确标注spacetime call是 UNSTABLE 命令可能有破坏性变更。用spacetime logs查看日志基本用法spacetime logs DATABASE_NAME参数说明DATABASE— 要查看日志的数据库的名称或 identity-s/--server SERVER— 数据库所在服务器的昵称、主机名或 URL不指定时使用默认配置。实时跟踪类似tail -f持续输出新产生的日志spacetime logs --follow DATABASE_NAME根据 CLI 实现同时使用--follow且未指定--num-lines时会从日志末尾附近的最后 10 行开始输出而不是从头刷整份日志如果你希望固定行数可显式加上-n NUM_LINES。-n/--num-lines用于限定输出的行数不指定时返回全部行。按级别过滤# 只看 error 及以上级别 spacetime logs --level error DATABASE_NAME # 只看 warn 及以上级别warn、error、panic spacetime logs --level warn DATABASE_NAME # 只看恰好 error 这一级 spacetime logs --level error --level-exact DATABASE_NAME可选级别从低到高为trace、debug、info、warn、error、panic。--level默认显示指定级别及更高级别的消息加--level-exact后只显示恰好该级别的消息。指定输出格式spacetime logs --format json DATABASE_NAME--format支持text默认和json两种取值。json 格式适合把日志接入后续处理。如何判断日志正常spacetime logs成功时逐行打印日志记录text 格式下每行包含时间戳、级别如INFO、WARN、ERROR、函数名/文件名位置如可用和消息体。你在 reducer 里写的那条消息出现在输出中就说明日志链路写日志 → 发布 → 调用 → 查看已经通了。如果spacetime call报错或spacetime logs拉不到任何行先检查数据库名/identity 是否正确、--server是否指向数据库所在的服务器。完整的参数列表可参考 CLI Reference本文写日志部分对应 Logging 文档。限制与注意事项日志可见范围日志只有数据库属主可见客户端收不到因此文档同时提醒不要在日志里写密码、认证 token 等敏感信息并留意个人信息PII。性能文档说明日志开销很小但过度打日志仍会影响性能避免在紧循环或高频操作里打日志啰嗦的输出建议放在 debug/trace 级别生产环境用--level过滤。日志级别的使用建议来自文档的 Best Practiceserror 用于阻止操作完成的真正错误warn 用于有问题但不阻止执行的情况info 用于重要的应用事件用户动作、状态变化debug 用于开发期的诊断细节trace 用于非常详细的诊断信息文档注明通常在生产禁用。文档之间的冲突Logging 文档 的 Filtering 一节给出了spacetime logs --since 2023-01-01 00:00:00 DATABASE_NAME按时间范围过滤但 CLI Reference 和 CLI 源码中spacetime logs的选项里均没有--since参数。本文以 CLI Reference 列为准可用选项为--num-lines、--follow、--format、--level、--level-exact、--server、--yes、--no-config。运行spacetime help logs查看你本机 CLI 实际支持的参数。C 模块Logging 文档中 C 的LOG_INFO/LOG_WARN等宏示例附有 C 模块的版本提示CppModuleVersionNotice如果你使用 C 模块请先按该提示确认对应的模块版本支持情况本文主路径不含 C。下一步日志中error/panic级别常伴随 reducer 执行失败可继续看 Error Handling 了解 reducer 的错误处理更多 CLI 选项dev、publish、describe等见 CLI Reference。【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考