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

iBa*_*mer 8 service logging controller symfony monolog

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

我有一个关于错误处理的noob问题,如果我用Guzzle调用的Api返回错误,最好的解决方案是什么?

解决方案1:我是否应该使用我自己的服务中注入的Logger服务来记录错误,并将错误返回给我的控制器以显示它.

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

Iva*_*ica 5

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

这样,您可以在调用另一个服务的服务中使用 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;
}
Run Code Online (Sandbox Code Playgroud)

还考虑解决方案 3:在服务中抛出异常并在自定义异常侦听器中捕获它,您可以在其中记录它并采取进一步的操作(例如替换 Response 对象等)。