我可以查询 CloudWatch,但是需要时间来获取数据。
是否有可能获取 Lambda 执行的所有日志,并在响应中返回这些数据?
更新于2020年6月15日
感谢@John的回答,这里提供更多信息:
我正在使用.NET中专用于Lambda的记录器。
https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.Logging.AspNetCore
我的应用程序需要记录日志以调试出现的任何问题。例如,您想要访问什么类型的“日志”?
我在不同的日志级别上仅记录一些数据,例如:
1. logger.LogDebug("Lambda started"); 2. logger.LogCritical(exceptions); 3. logger.LogInfo(businessDataForDebug);
我想要获取所有已通过日志级别传递的记录语句,并尽快将所有信息作为 Lambda 响应返回。日志数据必须指向特定的 Lambda 执行。否则,它将是无用的。
你从 CloudWatch 中寻找什么类型的数据?
我主要需要记录的字符串消息和异常(如果发生)。如果可能的话,包括特定日志调用的时间会很好。此外,一些“日志” ID 作为参考将会很好 - 有类似于 RequestId 的东西。
现在我可以通过在CloudWatch中进行查询来获取所有这些日志,但这需要时间,并且速度太慢了。我使用API调用:StartQueryAsync然后GetQueryResultsAsync。解决方案应尽可能快。我可以创建丑陋的自定义记录器,在其中可以将所有日志收集到List myLogs中,然后简单地作为JSON在响应中返回,但我希望有很好的AWS解决方案来实现此目的。
“执行日志”是什么意思?
我指的是Lambda简单函数运行时生成的所有日志。
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日志中的AWS Lambda函数输出吗?
是的,我可以从那里查询日志,但需要几秒钟才能获取它。我希望能更快地获取数据。
我相信AWS没有提供这样的解决方案。解决方法可能是将获取日志的工作委托给另一个Lambda函数,例如SQS,或将执行特定Lambda函数的日志移动到S3存储桶中,然后向用户提供下载链接。我的第一个主要Lambda函数必须快速处理许多请求,就像机关枪一样;)。
请为我建议最佳方法。我愿意进一步讨论。
敬礼,