AWS Lambda打印日志时开头字符被截断问题排查
Lambda打印内容截断/丢失问题原因及解决方法
导致该现象的常见原因有以下几种,可对应排查:
- Python行缓冲未及时刷新:Python默认print函数采用行缓冲机制,Lambda运行时如果程序执行结束速度快于缓冲刷新速度,开头的打印内容会在还没写入CloudWatch日志时就被销毁。可以在print参数中添加
flush=True强制立即刷新缓冲区,修改示例:# 开头打印修改为 print('HELLO zi', flush=True) # 遍历处打印修改为 print('key', item.key, flush=True) - Lambda控制台日志预览不完整:Lambda函数执行结果页展示的是简化的日志片段,完整的日志是分段存入CloudWatch日志流的,你看到的内容可能是中间段的日志,开头的
HELLO zi和第一条完整的key 0-ffk-mars/...日志存储在该次执行对应的日志流前半段,你可以进入CloudWatch日志服务,找到该函数对应日志组的全量日志流查看完整输出。 - 代码存在隐式打印逻辑:你当前贴出的代码中判断条件用了
str(item),S3的ObjectSummary对象转字符串时会包含key值,如果你的实际运行代码中存在漏写的print(item.key)逻辑(而不是print('key', item.key)),就会出现第一条日志没有key前缀的情况,可仔细核对实际运行的代码和你贴出的代码是否一致。 - 第三方库输出污染打印流:你代码中引入了未使用的
zipfile库,如果你的实际运行代码包含zip文件读取操作,部分底层库的隐式输出可能会覆盖前几行打印内容,导致开头内容丢失。
内容的提问来源于stack exchange,提问作者user13067694
相关产品推荐
相关产品推荐

