monolog教程 - symfony monolog



我应该在控制器还是服务中记录错误? (1)

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

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

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

解决方案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 :在服务中抛出一个异常,并将其捕获到一个自定义的异常监听器中 ,在那里你可以记录它并采取进一步的行动(如替换Response对象等)。





monolog