我有一个使用 AWS Lambda 函数的简单 Laravel 应用程序。我正在尝试调试为什么 lambda 有时会超时,因此我在控制器中记录 HTTP 请求参数之一。但问题是,当 lambda 超时时,日志不会记录到 CloudWatch。为什么?
我这样记录:
class ExchangeController extends Controller {
function balance(Request $request) {
Log::info("[ExchangeController] Start: " . $request->exchange . ", " . $_ENV['AWS_REQUEST_ID']);
$request->process();
Log::info("[ExchangeController] OK ");
...
在这里您可以看到“任务超时”日志的示例,您可以看到没有我的 Log::info() 输出的迹象:
但是在非超时功能的情况下,我的日志工作得很好:
我不是 Laravel 编码员,但根据我使用其他语言的经验,当 Lambda 函数超时时,它会被硬停止。执行流程似乎完全中止 - 这包括您可能期望在正常错误后运行的任何类型的最后一息错误处理/报告或上下文解析代码。就像有人把墙上的插头拔掉了。
如果要记录输入,则需要在进入处理程序时立即记录输入,而不是作为承诺稍后完成的任何内容的一部分,因为如果发生超时,稍后可能不会到来。