如何使用自定义处理程序停止Monolog处理?

时间:2016-10-24 08:55:16

标签: symfony monolog

我在Monolog项目中使用Symfony 2.8。我已配置邮件处理程序向我发送有关所有错误的通知。

由于并非所有错误都很重要(例如PageNotFound/apple-app-site-association),我想添加一个过滤器。我通过添加自定义处理程序来完成此操作:

配置:

services:
    monolog.custom_handler.service:
        class: AppBundle\Log\CustomHandler

monolog:
    main:
        type: service
        id: monolog.custom_handler.service            
        level: error 
        handler: mail_buffer 
    mail_buffer:
        type:    buffer
        handler: mailer
    mailer:
        type:       swift_mailer
        from_email: "my address"
        to_email:   "my address"
        subject:    ERROR!
        formatter:  monolog.formatter.extended   

处理程序:

namespace AppBundle\Log;

use Monolog\Handler\AbstractHandler;

class CustomHandler extends AbstractHandler {
    public function handle(array $record) {
        // Check if handling level was reached
        if ($record['level'] < $this->level) 
            return false;

        if (!empty($record)) {
            $url = (isset($record['extra']) && isset($record['extra']['url']) ? $record['extra']['url'] : '');
            $message = (isset($record['message']) ? $record['message'] : '');

            // Well Known Pages         
            if (strpos($url, '/.well-known') === 0) {
                //echo "...match 1</br>";
                return true;
            }

            if ($url == '/apple-app-site-association') {
                //echo "...match 2</br>";
                return true;
            }

            if (strpos($url, '/apple-touch-icon') === 0) {
                //echo "...match 3</br>";
                return true;
            }

            ...
        }

        // Record was NOT handled --> DO NOT stop bubbeling
        return false;
    }


}

使用我可以确认的echo语句,调用处理程序,并且if子句正确匹配。因此,如果例如调用/apple-app-site-association,则处理程序返回true。我希望,这会停止冒泡,因此嵌套的mail_buffer处理程序不再被调用。 情况并非如此。

无论处理程序返回true还是false,我仍然会收到所有错误的邮件。

我做错了什么?如何停止处理已过滤的邮件?

0 个答案:

没有答案