如何使用LocalStack运行Java Lambda函数并查看其运行日志
前置注意
你目前提供的测试代码仅完成了Lambda函数的创建操作,没有触发函数执行,所以不会生成运行日志,你可以在测试类的createLambda(lambdaClient);代码后补充函数调用逻辑,示例如下:
InvokeRequest invokeReq = new InvokeRequest().withFunctionName("handleRequest").withPayload("{}"); InvokeResult invokeRes = lambdaClient.invoke(invokeReq); // 打印调用返回结果 System.out.println("调用结果:" + new String(invokeRes.getPayload().array()));
查看Lambda运行日志的三种常用方法
方法1:直接查看LocalStack容器输出
你已经开启了DEBUG=1配置,且LAMBDA_EXECUTOR=local模式下Lambda运行日志会直接输出到LocalStack容器的标准输出中,执行以下命令即可实时查看日志:docker logs -f <你的LocalStack容器名称/容器ID>
容器名称可以通过docker ps命令查询,默认前缀一般是你docker-compose所在目录名。
方法2:通过AWS CLI查询模拟的CloudWatch日志
LocalStack完整模拟了AWS CloudWatch日志服务,Lambda运行日志会自动写入对应日志组,操作步骤如下:
- 确认本地已安装AWS CLI,执行以下命令查看所有日志组,找到你函数对应的日志组
/aws/lambda/handleRequest:aws logs describe-log-groups --endpoint-url=http://localhost:4566 --region us-east-1 - 查看该日志组下的所有日志流:
aws logs describe-log-streams --log-group-name /aws/lambda/handleRequest --endpoint-url=http://localhost:4566 --region us-east-1 - 拉取指定日志流的内容:
aws logs get-log-events --log-group-name /aws/lambda/handleRequest --log-stream-name <上一步查询到的日志流名称> --endpoint-url=http://localhost:4566 --region us-east-1
如果要实时追踪新产生的日志,可以直接用tail命令:aws logs tail /aws/lambda/handleRequest --follow --endpoint-url=http://localhost:4566 --region us-east-1
方法3:查看本地挂载目录中的日志文件
你在docker-compose中配置了LocalStack临时目录挂载到本地${TMPDIR:-/tmp/localstack},Lambda运行日志会落盘到该目录下,直接打开对应路径即可查看:
本地日志路径为:${TMPDIR:-/tmp/localstack}/lambda/logs/handleRequest/,目录下的log文件即为函数运行日志。
内容的提问来源于stack exchange,提问作者Yoav Stern
相关产品推荐
相关产品推荐

