Пользовательский монолог для выполнения дополнительных действий

0

Люди Helo,

В моем проекте иногда мне нужно отправлять сообщения электронной почты и сообщения журнала. Дело в том, что я не использую быструю почтовую программу, я использую API, который занимается доставкой электронных писем для меня.

Решение, которое я пробовал, заключается в том, что я создал настраиваемый процессор, где я ввел мою почтовую программу клиента. Я следил за http://symfony.com/doc/current/cookbook/logging/monolog.html#adding-a-session-request-token.

Поэтому у меня есть что-то вроде следующего:

namespace Tools\LoggerBundle;

use Symfony\Component\HttpFoundation\Session\Session;

class CustomProcessor
{
    private $session;
    private $token;
    // Client Mailer
    private $mailer;

    public function __construct(Session $session, $mailer)
    {
        $this->session = $session;
        $this->mailer = $mailer;
    }

    public function processRecord(array $record)
    {
        if (null === $this->token) {
            try {
                $this->token = substr($this->session->getId(), 0, 8);
            } catch (\RuntimeException $e) {
                $this->token = '????????';
            }
            $this->token .= '-' . substr(uniqid(), -8);
        }
        $record['extra']['token'] = $this->token;

        // Sends an email    
        $this->mailer->send('Alert', print_r($record, true));

        return $record;
    }
}

Это работает очень хорошо, за исключением того, что мне нужно отправлять электронные письма только тогда, когда уровень больше, чем предупреждение. В то же время нормальный каротаж не должен останавливаться.

Что ты предлагаешь?

  • 0
    возможно это дублируется stackoverflow.com/questions/10261272/…
  • 0
    Разница лишь в том, что я не использую swift_mailer, как в посте, который вы дали. Я должен рассмотреть возможность использования собственного обработчика, хотя ...
Теги:
logging
monolog

1 ответ

0

Вы должны использовать обработчик класса для отправки электронной почты вместо того, чтобы делать это на processoser

<?php

use Monolog\Handler\AbstractProcessingHandler;

class EmailHandler extends AbstractProcessingHandler
{
    private $mailer;

    public function __construct($mailer, $level = Logger::WARNING, $bubble = true)
    {
        parent::__construct($level, $bubble);
        $this->mailer = $mailer;
    }

    protected function write(array $record)
    {
        $this->mailer->send($record['level_name'], print_r($record, true));
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню