【发布时间】:2018-11-25 00:25:53
【问题描述】:
我在尝试将 Lambda 函数日志写入 CloudWatch Logs 时遇到了一些问题。如下所示,这似乎不是授权问题:
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action:
- logs:CreateLogGroup
Resource: !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:*
- Effect: Allow
Action:
- logs:CreateLogStream
- logs:PutLogEvent
Resource: !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${FunctionName}:*
我也尝试了更广泛的政策,将arn:aws:logs:*:*:* 作为资源,就像我找到的一些示例一样。
模板在 CloudFormation 上运行良好,并且资源已根据需要创建,当我执行 lambda 函数作为测试时,一切正常,但未写入日志。它创建日志组和日志流,但日志流中没有任何内容。
这也不是 Lambda 函数的问题。我在创建模板之前手动部署了该函数,CloudWatch Logs 在这种情况下运行良好。我完全按照手动创建模板的方法中所写的方式复制了角色和策略。
这是 CloudFormation/SAM/Lambda 中的某种已知错误吗?还是我做错了什么我没有注意到?
如果您需要更多信息来理解上下文,请告诉我。谢谢!
【问题讨论】:
-
嗯,这很奇怪,你是怎么写日志的?你有我可以看看的 github repo 吗?如果你愿意,我可以分享我的 github 用户名。
-
感谢@MrkFldig 的回答。我有,这是link。随意提出任何问题,因为它还没有很好的记录。它在 Java 中,我使用 log4j appender 来记录。
-
所以在黑暗中拍摄,因为我遇到了同样的问题 Bunyan,为 log4j 设置的日志级别是多少?您看起来主要使用 INFO,如果 Log4j 的默认值是高于您将看不到的日志级别?检查一下:docs.aws.amazon.com/lambda/latest/dg/… - 尝试 system.out 方法或证明我在说什么,将信息语句更改为错误。
-
日志级别,在项目的log4j2.xml中可以看到是INFO。我正是使用您链接到的示例来创建我的 log4j2 appender,它完全相同,我没有更改任何内容。我在问题中说过,当我手动部署 CloudWatch Logs 时,它工作得非常好,这个问题只有在我通过 CloudFormation 部署时才会发生。
-
您是否将 Lambda 部署为同一 CloudFormation 模板的一部分?如果是这样,您是否附加了一个允许其写入 CloudWatch 的角色?
标签: aws-lambda amazon-cloudformation amazon-cloudwatchlogs aws-sam