用途:为 Sandbox SDK 及容器运行时添加日志、调试代码以及统一使用 Logger。
主要能力与约定:日志器通过构造函数显式注入,代码库中不存在全局或环境日志器。示例:class MyService { constructor(private logger: Logger) {} }。使用 logger.child({ ... }) 创建子日志器,将结构化上下文附加到该子日志器的每一行日志上;推荐在工作单元(请求、操作、会话)的边界处创建子日志器,而不是每次调用都重新传入上下文。
配置:两个环境变量在启动时读取一次。SANDBOX_LOG_LEVEL 取值 debug | info | warn | error,表示最低输出级别;SANDBOX_LOG_FORMAT 取值 json | pretty,表示输出格式。生产环境用 json(便于机器解析),本地开发用 pretty。
测试:从 @repo/shared 引入 createNoOpLogger() 以在测试中静默日志,例如 const service = new MyService(createNoOpLogger())。单元测试中不要构造真实日志器,以免产生噪声或用日志输出掩盖真实失败。
添加日志的建议级别:info 用于重要生命周期事件(操作开始/完成);debug 用于细粒度追踪(请求体、中间状态);warn 用于可恢复的异常;error 用于会浮现给调用方的失败,并以结构化上下文包含错误对象:logger.error('Failed', { err })。结构化上下文应作为第二个参数传入,而不是用字符串插值。
限制:资料未提供日志采样、轮转、导出目的地、性能开销或与具体运行时后端的集成细节。