AWS Lambda CLI调用仅返回标准日志,自定义日志未出现在LogResult中
Lambda CLI调用时LogResult不包含自定义日志的原因和解决办法
为什么会出现这个现象?
我之前也碰到过一模一样的情况,其实原因很明确:Lambda通过CLI调用返回的LogResult字段,本质是Lambda服务同步返回的函数核心生命周期日志片段——也就是你看到的START/END/REPORT这三条。而你在函数里用console输出的自定义日志,是Lambda运行时异步推送到CloudWatch Logs的,不会被纳入同步的调用响应里,这就导致CloudWatch里能看到完整日志,但LogResult里只有那三条标准日志。
怎么获取自定义日志?
这里有两个实用的解决思路:
直接查询CloudWatch Logs
调用完函数后,用AWS CLI命令拉取对应日志内容就行:- 先确认你的Lambda函数对应的日志组,格式一般是
/aws/lambda/[你的函数名] - 用以下命令获取最新的日志条目(替换成你的日志组和日志流名称):
aws logs get-log-events --log-group-name "/aws/lambda/your-function-name" --log-stream-name "latest-log-stream-name" --limit 20
要是不知道日志流名称,可以先列出日志组下最新的日志流:
aws logs describe-log-streams --log-group-name "/aws/lambda/your-function-name" --order-by LastEventTime --descending --max-items 1- 先确认你的Lambda函数对应的日志组,格式一般是
把自定义日志包含在函数响应里
如果你需要在调用响应里直接拿到自定义日志,可以修改函数代码,把日志内容收集起来作为响应的一部分返回。比如在.NET里可以这么写:public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) { var customLogs = new List<string>(); customLogs.Add("Hello World custom log 1"); customLogs.Add("Hello World custom log 2"); // 同时输出到控制台,保证CloudWatch能收到日志 foreach(var log in customLogs) { Console.WriteLine(log); } return new APIGatewayProxyResponse { StatusCode = 200, Body = JsonSerializer.Serialize(new { Message = "Hello World", CustomLogs = customLogs }) }; }这样调用函数后,就能在响应的Body里直接看到自定义日志内容了。
内容的提问来源于stack exchange,提问作者Dmitrii Lobanov
相关产品推荐
相关产品推荐

