【问题标题】:Logger does not log Exceptions thrown in application记录器不记录应用程序中抛出的异常
【发布时间】:2019-04-07 12:41:43
【问题描述】:

我使用下面的配置来创建一个记录器:

'log' => [
    'logger' => [
        'writers' => [
            'stream' => [
                'name' => 'stream',
                'priority' => \Zend\Log\Logger::INFO,
                'options' => [
                    'stream' => __DIR__ . '/../../data/log/name_' . date("Ym") . '.log',
                    'formatter' => [
                        'name' => \Zend\Log\Formatter\Simple::class,
                        'options' => [
                            'format' => '%timestamp% %priorityName% : %message% %extra%',
                            'dateTimeFormat' => 'c',
                        ],
                    ],

                ],
            ],
        ],
        'processors' => [
            'requestid' => [
                'name' => \Zend\Log\Processor\RequestId::class,
            ],
            'backtrace' => [
                'name' => \Zend\Log\Processor\Backtrace::class,
            ],
        ],
    ],
],

日志工作正常,但 php 错误未在任何地方记录。

为什么?

我使用这段代码生成一个简单的错误

$d1 = new DateTime();
$d2 = new DateTime();
$a = array($d1,$d2);
$a->format("Y-m-d");

在我的控制器类中。

未记录此错误

【问题讨论】:

    标签: zend-framework3 zend-log zend-servicemanager


    【解决方案1】:

    在 PHP 7 的 Error 类中捕获致命错误

    }catch(\Error $err){
        $this->log->err($err->getMessage());
    

    Error class

    【讨论】:

      【解决方案2】:

      zend-log 默认不是异常或错误处理程序。你必须设置它来做到这一点。您可以使用 exceptionhandlererrorhandlerfatal_error_shutdownfunction 选项来设置它。所有配置键都接受布尔值。这是一个例子。我没有测试它,但应该是这样的。

      'log' => [
          'logger' => [
              'writers' => [
                  'stream' => [
                      'name' => 'stream',
                      'priority' => \Zend\Log\Logger::INFO,
                      'options' => [
                          'exceptionhandler' => true,
                          'errorhandler' => true,
                          'stream' => __DIR__ . '/../../data/log/name_' . date("Ym") . '.log',
                          'formatter' => [
                              'name' => \Zend\Log\Formatter\Simple::class,
                              'options' => [
                                  'format' => '%timestamp% %priorityName% : %message% %extra%',
                                  'dateTimeFormat' => 'c',
                              ],
                          ],
                      ],
                  ],
              ],
              'processors' => [
                  'requestid' => [
                      'name' => \Zend\Log\Processor\RequestId::class,
                  ],
                  'backtrace' => [
                      'name' => \Zend\Log\Processor\Backtrace::class,
                  ],
              ],
          ],
      ],
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-12
        • 2014-03-26
        • 2014-01-27
        • 2021-12-02
        • 2014-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多