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

Привет люди,

В моем проекте иногда мне нужно отправлять электронные письма и регистрировать сообщения. Дело в том, что я не использую Swift Mailer, я использую 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

Решение

Вы должны использовать класс Handler для отправки электронной почты вместо того, чтобы делать это на 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));
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]