我应该在控制器或服务中记录错误吗?

Should I log errors in a controller or in a service?

我有一个 Symfony 控制器,它基本上检查请求的参数是否在请求中,然后将这些参数传递给服务。该服务使用 Guzzle 调用 API,对结果执行一些操作,然后将其传递回控制器以显示带有响应的 Json。

我有一个关于错误处理的菜鸟问题,如果我用 Guzzle return 调用的 Api 出现错误,最好的解决方案是什么?

解决方案 1:我是否应该使用在我自己的服务中注入的 Logger 服务来记录错误,并且 return 将错误发送到我的控制器以便显示它。

解决方案 2:我应该在服务中抛出异常,在我的控制器中捕获它并在控制器中使用 $this->get("Logger") 以便在日志文件中记录错误

如果您的核心逻辑本身在服务中而不是在您的控制器中,那就太好了

这样,您可以在调用另一个服务的服务内部使用 try-catch 块,并且您的控制器保持干净整洁 - 您只需调用该服务而不会捕获任何异常。

// AppBundle/src/Controller/MainController.php
public function mainAction()
{
  // ...
  $result = $this->get('my_service')->getResult($parameters);
  if (!$result) {
    // show an error message, pass it to another service, ignore it or whatever you like
  }
}

// AppBundle/src/Service/MyService.php
public function getResult($parameters)
{
  try {
    $apiResult = $this->apiService->get($parameters);
  } catch (ApiException $e)
    $this->logger->error('My error message');
    $apiResult = null;
  }

  return $apiResult;
}

另请考虑 解决方案 3:在服务中抛出异常并捕获它 in a custom exception listener,您可以在其中记录它并采取进一步的操作(例如替换 Response对象等)。