You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在tRPC v10与Serverless Stack架构中查看全部日志?AWS CloudWatch端点补充日志缺失问题问询

解决tRPC v10 + Serverless Stack部署后CloudWatch看不到内部日志的问题

我之前在项目里也碰到过一模一样的问题,结合tRPC v10和Serverless Stack(SST)的特性,帮你梳理下可能的原因和对应的解决办法:

1. tRPC内置日志配置限制了细粒度日志输出

如果你的内部日志是用tRPC自带的logger(比如t.logger.debug())写的,那大概率是tRPC默认只输出info及以上级别的日志,debug级别的内部操作日志被过滤了。

解决办法很简单,初始化tRPC的时候自定义logger,把所有级别都转发到console:

// src/trpc/server.ts
import { initTRPC } from "@trpc/server";

const t = initTRPC.create({
  logger: {
    info: (...args) => console.info("[tRPC-Info]", ...args),
    warn: (...args) => console.warn("[tRPC-Warn]", ...args),
    error: (...args) => console.error("[tRPC-Error]", ...args),
    debug: (...args) => console.debug("[tRPC-Debug]", ...args), // 关键:开启debug级别输出
  },
});

// 示例路由
export const appRouter = t.router({
  getUser: t.procedure.query(({ input }) => {
    t.logger.debug(`开始查询用户ID: ${input}`); // 现在这条日志会出现在CloudWatch里
    return { id: input, name: "John Doe" };
  }),
});

export type AppRouter = typeof appRouter;

2. Serverless Stack的Lambda配置过滤了日志

如果你用的是原生console.log()/console.debug()写内部日志,那要检查SST的Lambda函数配置有没有设置日志级别过滤:

打开你的SST栈定义文件(比如stacks/ApiStack.ts),确认Lambda的环境变量里没有限制AWS_LAMBDA_LOG_LEVEL:

// stacks/ApiStack.ts
import { StackContext, Api, Function } from "@serverless-stack/resources";

export function ApiStack({ stack }: StackContext) {
  const apiHandler = new Function(stack, "ApiHandler", {
    runtime: "nodejs18.x",
    handler: "src/lambda.handler",
    environment: {
      // 注意:如果这里设置了AWS_LAMBDA_LOG_LEVEL为"info"或更高,debug日志会被过滤
      // 要么注释掉这行,要么设为"debug"
      // AWS_LAMBDA_LOG_LEVEL: "info" 
    },
    // 确保Lambda有足够的日志权限(SST默认会配置,但自定义角色的话要检查)
    permissions: ["logs"],
  });

  const api = new Api(stack, "Api", {
    routes: {
      "POST /trpc/{proxy+}": apiHandler,
    },
  });

  stack.addOutputs({
    ApiUrl: api.url,
  });
}

另外,确认Lambda的执行角色有CloudWatch Logs的权限——SST默认会给Lambda添加logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents这些必要权限,但如果是自定义角色,一定要补上。

3. 别找错CloudWatch日志组!

有时候不是日志没生成,是找错了地方。SST部署的Lambda日志组路径通常是:

/aws/lambda/<你的SST栈名称>-<函数名称>-<随机后缀>

最快的方法是直接在AWS控制台的Lambda服务里找到对应的函数,点击「监控」标签页的「查看CloudWatch日志」,直接跳转到正确的日志组,避免手动找错。

4. Lambda日志缓冲导致延迟

Node.js Lambda环境会缓冲console输出,直到函数执行结束或者缓冲区满才会发送到CloudWatch。如果你的端点有异步操作,偶尔会碰到日志延迟的情况——生产环境下函数执行结束后会自动flush所有日志,所以不用太担心;如果是本地开发用SST的Live Lambda Dev,可以试试显式调用console.flush()(不过一般不需要)。

总结

最常见的问题就是tRPC的logger没开debug级别,或者SST的Lambda配置限制了日志级别。按照上面的步骤调整后,应该就能在CloudWatch里看到所有内部日志了。

内容的提问来源于stack exchange,提问作者ProgrammingPatron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:43:12