NodeJS中async类型module.exports导出函数内部执行结果如何查看
问题原因排查与解决方案
首先你的模块加载阶段日志正常输出说明函数部署流程是正常的,async导出函数内部日志未打印,通常是以下几个原因导致,对应解决方法如下:
- 函数执行到内部逻辑前报错终止:
await run(false)执行过程中抛出未捕获的异常,代码直接中断,没有走到console.log(res)的步骤 - GCP日志筛选规则问题:Cloud Logging默认可以按日志级别过滤,console.log属于INFO级别,如果你筛选时只勾选了ERROR级别的日志,就看不到普通打印内容
- 直接打印res对象报错:res是Node.js的响应流对象,内部存在循环引用结构,直接调用
console.log(res)会触发序列化报错,导致代码中断没有输出
具体操作步骤
- 调整代码添加错误捕获,同时避免直接打印完整res对象,修改后代码如下:
const run = require("../../run"); console.log('hello'); module.exports = async (req, res) => { try { console.log('函数触发成功,进入执行逻辑'); await run(false); console.log('run方法执行完成'); // 只打印res中你需要排查的字段,避免循环引用问题 console.log('res核心信息:', JSON.stringify({ statusCode: res.statusCode, responseHeader: res.getHeaders(), customLocals: res.locals }, null, 2)); res.send("done"); console.log('响应发送完成,函数执行结束'); } catch (err) { console.error('函数执行报错:', err); res.status(500).send('exec fail'); } }; console.log('world');
- 重新部署函数后触发执行,打开GCP控制台的Cloud Logging页面,筛选对应云函数的资源,日志级别选择「INFO」,同时查看「ERROR」级别的日志确认是否有异常抛出。
- 若还是看不到内部日志,可直接手动请求云函数的触发地址,确认返回结果是
done还是exec fail,如果返回exec fail优先排查run方法的执行逻辑;如果返回done但无日志,检查你选择的日志查询时间范围是否和函数执行时间匹配。
内容的提问来源于stack exchange,提问作者MCLarge
相关产品推荐
相关产品推荐

