Добрый день Кто-то делал логгер на основе psr-3? Можете подсказать, правильно ли я его сделал? Код (Text): class Report implements Psr\Log\LoggerInterface { public function emergency($message, array $context = array()) { $report = date('y.m.d/h:i:s') . ' status: ' . LogLevel::EMERGENCY . ', сообщение: ' . $message; $transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl')) ->setUsername('secret.com') ->setPassword('password'); $mailer = new Swift_Mailer($transport); $message = (new Swift_Message) ->setSubject(LogLevel::EMERGENCY) ->setFrom('site@gmail.com') ->setTo('user@test.com') ->setBody($report); $mailer->send($message); }
Всем привет. Камрады, насколько приемлем такой вариант логгера: Код (Text): class LogLevel { public const EMERGENCY = 'emergency'; public const ALERT = 'alert'; public const CRITICAL = 'critical'; public const ERROR = 'error'; public const WARNING = 'warning'; public const NOTICE = 'notice'; public const INFO = 'info'; public const DEBUG = 'debug'; } class ReportInfo implements Psr\Log\LoggerInterface { protected $level; protected $message; public function __construct($level, $message) { $this->level = $level; $this->message = $message; } protected function getMessage() { return [ 'date' => date('y.m.d h:i:s'), 'message' => $this->message, 'level' => $this->level, ]; } protected function reportMessage($message) { $transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl')) ->setUsername('test@gmail.com') ->setPassword('test'); $mailer = new Swift_Mailer($transport); $message = (new Swift_Message) ->setSubject(LogLevel::EMERGENCY) ->setFrom('test@gmail.com') ->setTo('test.com') ->setBody($report); $mailer->send($message); } protected function reportLog($message) { $file = __DIR__ . '/test.txt'; $data = file($file, FILE_IGNORE_NEW_LINES); $data[] = $message; file_put_contents($file, implode(PHP_EOL, $data)); } public function action() { $this->log($this->level, $this->getMessage()); } public function emergency($message, array $context = array()) { $this->reportMessage(implode(' | ', $message)); $this->reportLog(implode(' | ', $message)); } public function alert($message, array $context = array()) { $this->reportMessage(implode(' | ', $message)); $this->reportLog(implode(' | ', $message)); } public function critical($message, array $context = array()) { $this->reportMessage(implode(' | ', $message)); $this->reportLog(implode(' | ', $message)); } public function error($message, array $context = array()) { $this->reportLog(implode(' | ', $message)); } public function warning($message, array $context = array()) { $this->reportMessage(implode(' | ', $message)); $this->reportLog(implode(' | ', $message)); } public function notice($message, array $context = array()) { $this->reportMessage(implode(' | ', $message)); $this->reportLog(implode(' | ', $message)); } public function info($message, array $context = array()) { $this->reportMessage(implode(' | ', $message)); } public function debug($message, array $context = array()) { $this->reportLog(implode(' | ', $message)); } public function log($level, $message, array $context = array()) { $this->$level($message); } } $report = new ReportInfo(LogLevel::ALERT, 'Бобры погрызли провода=(('); $report->action(); --- Добавлено --- Может кто-то поделиться опытом, как лучше написать?
у тебя класс делает две три вещи сразу: сообщеньки формирует в файлик записывает на почту отправляет я бы это разнес на разные классы + композиция.
Вообще, внимательно монолог поизучай, не только как логгер, а именно композицию и код. По сути эталонный пример пакета, который расширяется во все стороны и интегрируется хоть куда, при этом сохраняя простой внешний интерфейс.