在类中写入日志文件错误消息

时间:2017-08-10 14:41:11

标签: symfony logging

我应该如何在日志文件中写入错误或我想从实体类中发送的消息? 这个想法是这样的:我有一些具有一些属性的项目以及具有一些属性的配置。我需要检查项目是否具有配置属性中也存在的属性。当我调试我的应用程序时,我在某处:

public function getProperty(idProperty $propertyId)
{
    $properties = $this->ItemProperties();

    if (isset($properties[$propertyId->getValue()])) {
        return $properties[$propertyId->getValue()];
    }else{
       //here I want to write in the log file that the propertyId is not in the $properties. 
    }
    return null;
}

那我怎么能实现呢?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以抛出 $?<sh> = ( $?<real> & 0x7F ) ? ( $?<real> | 0x80 ) : ( $?<real> >> 8 ); 并设置Exception,这将写入日志。 内部实体:

Exception Listener

在Listener类中:

if (isset($properties[$propertyId->getValue()])) {
    return $properties[$propertyId->getValue()];
} else {
   throw new DomainException('Something is wrong.' . print_r($this, true));
}

services.yml

public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

 public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $e = $event->getException();
        if ($e instanceof DomainException) {
            $this->logger->warning('Exception ' . get_class($e) , ['message' => $e->getMessage()]);
            $event->setResponse(
                new JsonResponse(['error' => $e->getMessage()], 400)
        );

Symfony Events

您也可以将 app.exception_listener: class: Application\Listeners\ExceptionListener arguments: ['@domain.logger'] tags: - { name: kernel.event_listener, event: kernel.exception } 注入您的实体并从那里写入日志,但它违反了单一责任原则。

<强>更新

Logger是一个简单的类,继承自DomainException。在此示例中,仅用于区分您的自定义异常以及PHP或其他库抛出的异常。

它还可以包含其他功能,例如,在构造函数中接受两条消息,将其中一条消息写入日志文件,然后为您的用户输出另一条消息。