За последние 24 часа нас посетили 18725 программистов и 1652 робота. Сейчас ищут 859 программистов ...

Нужен совет по PSR-3

Тема в разделе "PHP для новичков", создана пользователем kentkent7, 25 июн 2018.

  1. kentkent7

    kentkent7 Новичок

    С нами с:
    30 июн 2017
    Сообщения:
    72
    Симпатии:
    5
    Добрый день
    Кто-то делал логгер на основе psr-3?
    Можете подсказать, правильно ли я его сделал?

    Код (Text):
    1. class Report implements Psr\Log\LoggerInterface
    2. {
    3.     public function emergency($message, array $context = array())
    4.     {
    5.         $report = date('y.m.d/h:i:s') . ' status: ' . LogLevel::EMERGENCY . ', сообщение: ' . $message;
    6.         $transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
    7.             ->setUsername('secret.com')
    8.             ->setPassword('password');
    9.         $mailer = new Swift_Mailer($transport);
    10.         $message = (new Swift_Message)
    11.             ->setSubject(LogLevel::EMERGENCY)
    12.             ->setFrom('site@gmail.com')
    13.             ->setTo('user@test.com')
    14.             ->setBody($report);
    15.         $mailer->send($message);
    16.     }
     
  2. kentkent7

    kentkent7 Новичок

    С нами с:
    30 июн 2017
    Сообщения:
    72
    Симпатии:
    5
    Просьба закрыть тему, перееду в профессионалы :)

    авотфиг
    — Модераторъ
     
  3. kentkent7

    kentkent7 Новичок

    С нами с:
    30 июн 2017
    Сообщения:
    72
    Симпатии:
    5
    Всем привет.

    Камрады, насколько приемлем такой вариант логгера:

    Код (Text):
    1. class LogLevel
    2. {
    3.     public const EMERGENCY = 'emergency';
    4.     public const ALERT = 'alert';
    5.     public const CRITICAL = 'critical';
    6.     public const ERROR = 'error';
    7.     public const WARNING = 'warning';
    8.     public const NOTICE = 'notice';
    9.     public const INFO = 'info';
    10.     public const DEBUG = 'debug';
    11. }
    12.  
    13. class ReportInfo implements Psr\Log\LoggerInterface
    14. {
    15.     protected $level;
    16.     protected $message;
    17.  
    18.     public function __construct($level, $message)
    19.     {
    20.         $this->level = $level;
    21.         $this->message = $message;
    22.     }
    23.  
    24.     protected function getMessage()
    25.     {
    26.         return
    27.         [
    28.             'date' => date('y.m.d h:i:s'),
    29.             'message' => $this->message,
    30.             'level' => $this->level,
    31.         ];
    32.     }
    33.  
    34.     protected function reportMessage($message)
    35.     {
    36.         $transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
    37.             ->setUsername('test@gmail.com')
    38.             ->setPassword('test');
    39.         $mailer = new Swift_Mailer($transport);
    40.         $message = (new Swift_Message)
    41.             ->setSubject(LogLevel::EMERGENCY)
    42.             ->setFrom('test@gmail.com')
    43.             ->setTo('test.com')
    44.             ->setBody($report);
    45.         $mailer->send($message);
    46.  
    47.     }
    48.  
    49.     protected function reportLog($message)
    50.     {
    51.         $file = __DIR__ . '/test.txt';
    52.         $data = file($file, FILE_IGNORE_NEW_LINES);
    53.         $data[] = $message;
    54.         file_put_contents($file, implode(PHP_EOL, $data));
    55.  
    56.     }
    57.  
    58.     public function action()
    59.     {
    60.         $this->log($this->level, $this->getMessage());
    61.     }
    62.  
    63.     public function emergency($message, array $context = array())
    64.     {
    65.         $this->reportMessage(implode(' | ', $message));
    66.         $this->reportLog(implode(' | ', $message));
    67.     }
    68.  
    69.     public function alert($message, array $context = array())
    70.     {
    71.         $this->reportMessage(implode(' | ', $message));
    72.         $this->reportLog(implode(' | ', $message));
    73.     }
    74.  
    75.     public function critical($message, array $context = array())
    76.     {
    77.         $this->reportMessage(implode(' | ', $message));
    78.         $this->reportLog(implode(' | ', $message));
    79.     }
    80.  
    81.     public function error($message, array $context = array())
    82.     {
    83.         $this->reportLog(implode(' | ', $message));
    84.     }
    85.  
    86.     public function warning($message, array $context = array())
    87.     {
    88.         $this->reportMessage(implode(' | ', $message));
    89.         $this->reportLog(implode(' | ', $message));
    90.     }
    91.  
    92.     public function notice($message, array $context = array())
    93.     {
    94.         $this->reportMessage(implode(' | ', $message));
    95.         $this->reportLog(implode(' | ', $message));
    96.     }
    97.  
    98.     public function info($message, array $context = array())
    99.     {
    100.         $this->reportMessage(implode(' | ', $message));
    101.     }
    102.  
    103.     public function debug($message, array $context = array())
    104.     {
    105.         $this->reportLog(implode(' | ', $message));
    106.     }
    107.  
    108.     public function log($level, $message, array $context = array())
    109.     {
    110.         $this->$level($message);
    111.     }
    112. }
    113.  
    114. $report = new ReportInfo(LogLevel::ALERT, 'Бобры погрызли провода=((');
    115. $report->action();
    --- Добавлено ---
    Может кто-то поделиться опытом, как лучше написать?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    у тебя класс делает две три вещи сразу:
    сообщеньки формирует
    в файлик записывает
    на почту отправляет

    я бы это разнес на разные классы

    + композиция.
     
    mkramer нравится это.
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    https://github.com/Seldaek/monolog изучай )
     
  6. kentkent7

    kentkent7 Новичок

    С нами с:
    30 июн 2017
    Сообщения:
    72
    Симпатии:
    5
    Спасибо!
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Вообще, внимательно монолог поизучай, не только как логгер, а именно композицию и код. По сути эталонный пример пакета, который расширяется во все стороны и интегрируется хоть куда, при этом сохраняя простой внешний интерфейс.