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

如何将Vercel上Next.js无服务器函数日志发送到Google Cloud Logs

问题核心原因

LogSync 类的默认行为是仅将日志输出到标准输出(stdout),该设计适配谷歌自家的Cloud Functions、Cloud Run等无服务器环境——这类平台会默认自动采集容器stdout的日志并同步上报到Cloud Logging,无需额外调用上报API。但Vercel无服务器函数没有内置该自动同步逻辑,因此日志只会出现在Vercel的日志面板中,不会被推送到谷歌云。

解决方案

方案1:调整LogSync配置启用直接API上报

修改logSync初始化参数,显式指定使用API传输替代默认的控制台输出:

import { Logging, ApiTransport } from "@google-cloud/logging";
// 你的凭证、projectId、logName等配置保持不变
const log = logging.logSync(logName, {
  transport: new ApiTransport({
    projectId,
    credentials: creds
  })
});
// 后续写日志逻辑保持不变

方案2:使用异步Log类,确保上报完成再返回响应

之前用logging.log不生效的核心原因是Vercel无服务器函数在返回响应后会立即冻结进程,未完成的异步上报请求会被中断,只需要在上报时加await等待操作完成即可:

import { Logging } from "@google-cloud/logging";
// 初始化配置不变
const log = logging.log(logName);
const metadata = {
  resource: { type: "global" },
  severity,
  textPayload,
  jsonPayload,
};
const entry = log.entry(metadata);
// 一定要加await,等待日志上报完成再返回函数响应
await log.alert(entry);

额外排查项

如果修改后仍不生效,请检查以下配置:

  • 服务账号凭证正确性:private_key的换行符\n不能省略,client_email和projectId要和谷歌云控制台的配置完全匹配
  • 权限配置:你的服务账号需要被授予roles/logging.logWriter权限
  • 日志查询规则:在Cloud Logging控制台查询时,资源类型要选择global,日志名称要和代码中指定的logName一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:03