在 Koa 中你会采用哪些具体步骤来记录错误日志?请说明从请求进入到响应返回的完整流程。
考察说明
考查对 Koa 中间件机制、异步错误处理及日志记录实践的理解。
回答思路
- 【回答框架 1】Koa 基于洋葱模型,错误处理依赖中间件。通过 app.on('error') 监听应用级错误,可集中处理未被捕获的异常。应在中间件层添加 try-catch 或使用 koa-onerror 插件捕获异步错误。
- 【回答框架 2】错误日志记录应包含请求上下文:方法、路径、状态码、响应时间、错误堆栈等。可使用 koa-logger 中间件记录请求日志,结合自定义错误处理中间件将错误信息写入日志文件或日志系统。
- 【回答框架 3】在中间件中抛出错误时,Koa 会自动触发 error 事件。建议在最外层添加错误处理中间件,捕获后调用 ctx.app.emit('error', err, ctx) 将错误传递到全局监听器,确保日志统一记录。
- 【回答框架 4】对于未捕获的 promise rejection 或异步回调错误,需在全局使用 process.on('unhandledRejection') 和 process.on('uncaughtException') 进行兜底,但生产环境应谨慎重启进程。可选择日志框架如 winston、pino 支持分级与结构化输出。
- 【回答框架 5】关键点包括错误分类、脱敏处理、日志级别(info、warn、error)与采样策略,避免记录敏感数据如密码、token。
- 【关键点 1】使用 app.on('error') 进行全局错误监听,统一记录堆栈和请求上下文。
- 【关键点 2】通过自定义中间件捕获异步错误,并转发到全局错误处理器。
- 【关键点 3】日志中应包含请求方法、路径、状态码、响应耗时,避免记录敏感信息。
- 【关键点 4】可采用 koa-logger 记录常规请求日志,配合 winston 写入文件或远程日志系统。
- 【关键点 5】兜底处理 unhandledRejection 与 uncaughtException,防止进程崩溃。