fmt.Println 输出未显示在 CloudWatch 日志中

fmt.Println output does not show up in CloudWatch logs

我使用无服务器框架创建了一个简单的 Go Lambda 来玩。我预计(根据文档)fmt.Printlnlog.Println 的所有输出都会显示在 Cloudwatch 中。但我没有看到。

这是我纯粹出于测试目的而输入的一行示例:

func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    fmt.Println("Hello from lambda")

    (...)

我确定权限是正确的,因为我看到了日志组,并且有 Cloudwatch 条目可供查看此 lambda。我实际上可以看到正在 CloudFormation 中创建的日志组,所以我确定这不是问题所在。但我在 CloudWatch 中看不到任何 Println 语句的输出。这就是我所做的看到的:

START RequestId: fd48461b-3ecd-11e8-9e32-594932db04f2 Version: $LATEST
END RequestId: fd48461b-3ecd-11e8-9e32-594932db04f2
REPORT RequestId: fd48461b-3ecd-11e8-9e32-594932db04f2  Duration: 13.82 ms  Billed Duration: 100 ms Memory Size: 256 MB Max Memory Used: 21 MB  

我已经尝试了各种其他 Print 方法(例如 Printf),但您不会对没有任何改变感到惊讶。

我错过了什么?

抱歉,我以前没有使用过 Lambda。也许使用 glog 库会有所帮助。see the glog

好吧,这很尴尬......当然,你需要 运行 make 在 运行 之前 sls deploy... 如果你不这样做也就是说,您将始终部署陈旧的代码。我会原谅自己,因为这只是我在 Go 的第二天,但它仍然很愚蠢。

我通过添加 deployinstall 更新了我的 Makefile,如下所示:

build:
    dep ensure
    env GOOS=linux go build -ldflags="-s -w" -o bin/hello hello/main.go
    env GOOS=linux go build -ldflags="-s -w" -o bin/world world/main.go

deploy:
    sls deploy

install:    build deploy

make install 现在构建,然后部署,防止再次发生此问题。