CloudWatch Lambda日志嵌套对象显示为[object]无法查看实际内容
这个问题的根因是Lambda的Node.js运行时中,console.log默认最多只展开2层嵌套对象,超过层级的嵌套内容就会被标记为[Object],和对象本身的状态无关,属于日志打印的默认截断逻辑。
解决方案
方法1:通用JSON序列化打印(适配所有运行时)
打印对象时改用JSON.stringify序列化后输出,可完整展示所有层级的嵌套内容:// 2表示缩进空格数,输出格式化的JSON结构 console.log(JSON.stringify(yourTargetObject, null, 2))该方法优势是兼容性强,不需要额外依赖,缺点是无法序列化JSON不支持的类型(比如函数、undefined、Symbol等)。
方法2:Node.js环境自定义展开深度
如果你使用Node.js运行时,可通过内置的util.inspect方法设置无限制展开深度:const util = require('util') // depth设为null代表不限制展开层级 console.log(util.inspect(yourTargetObject, {depth: null}))该方法可完整保留JS原生对象的所有类型输出,更贴合原生console.log的展示格式。
方法3:全局配置默认展开深度
不想逐个修改打印语句的话,可在代码入口处全局修改util的默认配置,后续所有console.log都会自动展开全层级对象:require('util').inspect.defaultOptions.depth = null
注意:CloudWatch单条日志最大支持256KB内容,若打印的对象过大,超出部分会被自动截断,这种场景建议拆分打印或仅输出需要的字段。
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

