*/ class ErrorLogHandler extends AbstractProcessingHandler { public const OPERATING_SYSTEM = 0; public const SAPI = 4; /** @var int */ protected $messageType; /** @var bool */ protected $expandNewlines; /** * @param int $messageType Says where the error should go. * @param bool $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries */ public function __construct( int $messageType = self::OPERATING_SYSTEM, $level = Logger::DEBUG, bool $bubble = true, bool $expandNewlines = false, ) { parent::__construct($level, $bubble); if (false === in_array($messageType, self::getAvailableTypes(), true)) { $message = sprintf('The given message type "%s" is not supported', print_r($messageType, true)); throw new \InvalidArgumentException($message); } $this->messageType = $messageType; $this->expandNewlines = $expandNewlines; } /** * @return int[] With all available types */ public static function getAvailableTypes(): array { return [ self::OPERATING_SYSTEM, self::SAPI, ]; } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter('[%datetime%] %channel%.%level_name%: %message% %context% %extra%'); } /** * {@inheritDoc} */ protected function write(array $record): void { if (!$this->expandNewlines) { error_log((string) $record['formatted'], $this->messageType); return; } $lines = preg_split('{[\r\n]+}', (string) $record['formatted']); if ($lines === false) { $pcreErrorCode = preg_last_error(); throw new \RuntimeException('Failed to preg_split formatted string: ' . $pcreErrorCode . ' / '. Utils::pcreLastErrorMessage($pcreErrorCode)); } foreach ($lines as $line) { error_log($line, $this->messageType); } } } __halt_compiler();----SIGNATURE:----NooZ/s7q8nJjY6mP3j2U5nO1i+qtNF+Lsm0nTtko/GcTNCfX7jp+TRhKwK2Xsj5ZYh4J561PVIXng9iyNrqMXQFuu3ripG+CVMH+4uaGhruOMPEFJbarqHDD4B33n8doHwLkXyyslsWRfp+e6gKDG+166Nsua3vAe3Ufqo0bB6134+0zs5ZqgcrBhOz6fBfbzL3kz4kSYXKg+mgv23Qk435a5iuaXGmcX5J45n30cWy7nV4N7X65UNFpTh9wm/53D0Hg7hKRaFIZK06GvPOSOin2/Ni4mZi31tQKi3kBS93yz00MA0RcOQAqeBBp9F0fyshYSH/LAQkGPWl5whYIX5pRP5S1XfXPmKrMp9xgkEvTT+vePDlupgBTfJVW4Z0I8Kh5Ar/82vRKfrAXC9GO2S7GgZtfAdswv0WS4XnF5HL5NAjLI4TD1RVG6LY5TTiOuEtfC8ZkUlUmhMR5MmT5Ec1s3l3rXZN39luwD4YHyvX9YcI1hYPnzIWboU501f6JKHsXCqDjZuqbpvaMKlYeoTjHUFcVwPse8f+elqza6o4gKWBOH24R0TGZZ6tTZf6x+5wG3MjAs82FYeu0ZwTiu1PtvWg8kh5qZ1jNgX6TvijDE8euPKkXSrD6T2XeX51l4eEPLgze0SnGxFVUO7tlw3Vhe2i0lKQFSEULmIRwOdQ=----ATTACHMENT:----MjUxNDc4ODQ3NjIxODYxNyA3ODkyNzA4NDU1OTEzNDkzIDQ4NTkwODU4NTczMTY1MDU=