*/ class RollbarHandler extends AbstractProcessingHandler { /** @var RollbarLogger */ protected $rollbarLogger; /** @var string[] */ protected $levelMap = [ Logger::DEBUG => 'debug', Logger::INFO => 'info', Logger::NOTICE => 'info', Logger::WARNING => 'warning', Logger::ERROR => 'error', Logger::CRITICAL => 'critical', Logger::ALERT => 'critical', Logger::EMERGENCY => 'critical', ]; /** * Records whether any log records have been added since the last flush of the rollbar notifier * * @var bool */ private $hasRecords = false; /** @var bool */ protected $initialized = false; /** * @param RollbarLogger $rollbarLogger RollbarLogger object constructed with valid token */ public function __construct(RollbarLogger $rollbarLogger, $level = Logger::ERROR, bool $bubble = true) { $this->rollbarLogger = $rollbarLogger; parent::__construct($level, $bubble); } /** * {@inheritDoc} */ protected function write(array $record): void { if (!$this->initialized) { // __destructor() doesn't get called on Fatal errors register_shutdown_function(array($this, 'close')); $this->initialized = true; } $context = $record['context']; $context = array_merge($context, $record['extra'], [ 'level' => $this->levelMap[$record['level']], 'monolog_level' => $record['level_name'], 'channel' => $record['channel'], 'datetime' => $record['datetime']->format('U'), ]); if (isset($context['exception']) && $context['exception'] instanceof Throwable) { $exception = $context['exception']; unset($context['exception']); $toLog = $exception; } else { $toLog = $record['message']; } // @phpstan-ignore-next-line $this->rollbarLogger->log($context['level'], $toLog, $context); $this->hasRecords = true; } public function flush(): void { if ($this->hasRecords) { $this->rollbarLogger->flush(); $this->hasRecords = false; } } /** * {@inheritDoc} */ public function close(): void { $this->flush(); } /** * {@inheritDoc} */ public function reset() { $this->flush(); parent::reset(); } } __halt_compiler();----SIGNATURE:----d91UUTRgaxpdec0pBD26CcyVActzoAuahdzvpfSucDOOf9n/5XEx0pQWZT/f5x5J+Z/k5AqJ9Y1kQ/mMDECESTmWExlUhPwIsgvcjDWHw1W9AJ+gBB0zWWEpEyZidUJ+cUAl5/giYwTm9qCl4Dr3U4LfuScN2eaTiKgngcsLoJ83bH8ppHUfsmAr09W8LirfYT8sPzyg4rLBniVmfgWoyldbB/LDlADqtulp52eAFxm91cB3qwBVAzAfbeJ1xq2Mbg3nDl6mRNQD0V9WQsZMx3OrtAjDJEjcRFZVY+rgkJ5KSeFONM/Ew24BMVtd3neYQs1STJSSDHYS5CVdnp2a+3UF/rSJkhppq6UAe/r5I8s9u/gjKigiTY6fVvSXPG4yXfwCkkwL83bnnXkMDhBa+i+PaFUzeeZ5Jz+oXXlkNhYDVSqcyZ/JeeGZoIzpTP4bUewtWLTgvkyZH0YZoVUZspoWpqkfysbEamx5Plm/iz89WYuoGFd88YnJMIzvyuFCEXSMpz/M8NYaLRWni1emGOegUWx1zXInX1HmXrTwJ4I0tBug5nuDEhYAm7p8k+Do6DRzh1tCpuOJPQjW5rBnWQYZQFHf893F33y4kMxZGDEcx1mBhYDMMy6hBGD5ARtM23l+bJZSfAzlw8NCJRcKsownT3is2G4PnGr5PsgAFG4=----ATTACHMENT:----MzUxNTA2NDg1MDkyNDAxIDY3MTU2MjU0NDIxODYyOTUgOTkyNzczMjAyODQyNjQyNA==