亚马逊 lambda 不显示 python 日志

Amazon lambda does not show python logs

我的 API(Python) 部署在 Amazon Lambda 上。问题是当我请求 API 时出现内部服务器错误。我可以跟踪 Lambda 日志,但看不到代码崩溃的实际错误或堆栈跟踪。当我跟踪日志时,我只得到以下输出。

START RequestId: 62341bgd-6231-11e8-8c5b-25793532a32u Version: $LATEST
END RequestId: 62341b0d-6231-1128-8r5b-2b793032a3ed
REPORT RequestId: 6234te0b-6rte-aaa8-au5a-21t93132r3rt  Duration: 0.46 ms

如何查看 python api 的实际堆栈跟踪以进行调试?

Lambda 始终尝试将 Python 堆栈跟踪写入 CloudWatch。确保您的函数具有所需的权限:

    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Resource": "arn:aws:logs:eu-west-1:123456789012:*"
    },
    {
        "Effect": "Allow",
        "Action": "logs:CreateLogGroup",
        "Resource": "*"
    }

如果您正在使用 Lambda_basic_execution 角色,python 中的简单打印将在 cloudwatch 中显示日志。

初步调查:

默认情况下,lambda 函数以我的 API 的名称在 CloudWatch 中创建日志组。例如,/aws/lambda/my_api_name 显示类似这样的输出。

START RequestId: 62341bgd-6231-11e8-8c5b-25793532a32u Version: $LATEST
END RequestId: 62341b0d-6231-1128-8r5b-2b793032a3ed
REPORT RequestId: 6234te0b-6rte-aaa8-au5a-21t93132r3rt  Duration: 0.46 ms

问题解决:

我为我的云手表创建了一个服务角色(AWS 已经提供的云手表所有权限的默认策略),然后将这个角色放入我的API。我关注了这个approach。然而,另一个步骤是将新创建的执行日志与默认日志组合,这样我们就有了一个日志组。

我的日志已启用,但它仍然没有打印任何内容,它也没有在 CloudWatch 中显示添加的日志。但是当我评论一个试图从 dynamo db 打印太多数据的 print 语句时,它又开始工作了,所以也许在你的代码的其他地方你使用 print 来打印大量数据所以禁用它

you cant print too much data or it will neither print anything in test nor will it add log in CloudWatch