【发布时间】:2020-10-04 05:59:02
【问题描述】:
我想直接快速访问 AWS lambda 中的日志。
我可以查询 CloudWatch,但获取数据需要时间。
是否可以在 Lambda 中获取所有执行日志并返回此数据作为响应?
2020 年 6 月 15 日更新
感谢@John 的回答,我在这里提供更多信息:
我在 .NET 中为 lambda 使用专用记录器
https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.Logging.AspNetCore
如果出现任何问题,我的应用需要记录日志以进行调试。
例如,您要访问什么类型的“日志”
我只在 lambda 函数中以不同的日志记录级别记录一些数据,例如:
- logger.LogDebug("Lambda 已启动");
- logger.LogCritical(异常);
- logger.LogInfo(businessDataForDebug);
我想获取所有记录的语句,这些语句通过日志记录级别传递,并尽快在 lambda 响应中返回所有这些信息。 日志数据必须引用特定的 lambda 执行。 否则,它将无用。
您要从 CloudWatch 寻找什么类型的数据?
如果发生,我主要需要记录字符串消息和异常。如果可能的话,最好包括特定日志调用的时间。此外,一些“日志”ID 可以作为参考 - 有类似 RequestId 的东西。
目前我可以在 CloudWatch 中获取所有这些日志进行查询,但这需要时间而且速度太慢。我进行 API 调用:StartQueryAsync,然后是 GetQueryResultsAsync。解决方案应该尽可能快。我可以制作丑陋的自定义记录器,在那里我可以收集所有日志到 ex。列出 myLogs 并简单地以 JSON 的形式返回,但我希望有很好的 AWS 解决方案来解决这个问题。
“执行日志”是什么意思?
我指的是 Lambda 简单函数运行时中 logger 生成的所有日志。
LambdaFunction(request, context){
InitializeLoggerWithLogLevel(debug);
logger.LogInfo("Log Info"); //Not logged due to min log level Debug
logger.LogTrace("Log Trace"); //Logged, trace > debug
logger.LogDebug("Log debug"); //Logged, debug == debug
您指的是存储在 Amazon CloudWatch Logs 中的 AWS Lambda 函数的输出吗?
是的,我可以从那里查询日志,但需要几秒钟才能得到它。我会更快地获取数据。
我可以相信 AWS 不提供这样的解决方案。解决方法可能是通过 ex 将获取日志委托给另一个 lambda。 SQS 或将执行的特定 lambda 函数的日志移动到 S3 存储桶,然后提供用户链接以供下载。我的第一个主要 lambda 必须很快,可以处理许多请求,例如机关枪;)。
请告诉我最好的方法。我愿意进一步讨论。
问候,
【问题讨论】:
-
请编辑您的问题以提供更多信息。例如,您想要访问什么类型的“日志”,它们存储在哪里以及它们包含什么信息?您要从 CloudWatch 寻求什么类型的数据? “执行日志”是什么意思?您指的是存储在 Amazon CloudWatch Logs 中的 AWS Lambda 函数的输出吗?请编辑您的问题以提供此附加信息,而不是通过评论来回答。
-
您好约翰,谢谢您的回答。我添加了更新。
标签: .net logging aws-lambda amazon-cloudwatch