Как изменить способ записи PHP ошибок в файл журнала ошибок?

Я работаю над своим веб-сайтом уже более года, и я очень хочу, наконец, выпустить его для людей. Тем не менее, он стал довольно большим – я почти хочу сказать из-под своего контроля, и, кроме того, я действительно просто самолюбивый программист.

Поэтому я хочу быть уверенным, что любые ошибки, которые производит php, регистрируются в файле, поэтому я могу получить доступ к этому файлу и отслеживать ошибки.

В настоящее время мои настройки следующие:

<?php error_reporting(E_ALL); ini_set('display_errors', '0'); ini_set('log_errors', 1); ini_set('error_log', 'errors.log'); ?> 

До сих пор хорошо работает, файл error.log будет содержать такие вещи:

[14-May-2013 00:16:26] PHP Примечание: неопределенная переменная: nonexistentvariable в /home/www/dir/index.php в строке 14 [14-May-2013 00:16:28] PHP Примечание: неопределенная переменная : nonexistentvariable в /home/www/dir/index.php в строке 14

Отлично, ошибки регистрируются.

Но теперь у меня есть проблема:

  1. Все они в одной линии, без перерывов. Трудно читать. Как получить каждую ошибку в новой строке?

  2. Я вижу, что есть метка времени. Потрясающие! Как я могу добавить такие вещи, как IP-адрес пользователя или любые другие пользовательские вещи?

Опять же, мои вопросы:

Как изменить способ записи PHP ошибок в файл журнала ошибок? В частности, как я могу создать новую строку после каждой зарегистрированной ошибки, так что файл error.log легче читать. И как я могу добавить пользовательские данные и такие значения, как IP-адреса?

ОТВЕТ: Я закончил делать следующее – это, кажется, несколько воспроизводит то, что php делает по стандарту, и может быть изменено.

 <?php function my_error_handler($type, $message, $file, $line, $vars) { switch($type) { case 1: // 1 // $type_str = 'ERROR'; break; case 2: // 2 // $type_str = 'WARNING'; break; case 4: // 4 // $type_str = 'PARSE'; break; case 8: // 8 // $type_str = 'NOTICE'; break; case 16: // 16 // $type_str = 'CORE_ERROR'; break; case 32: // 32 // $type_str = 'CORE_WARNING'; break; case 64: // 64 // $type_str = 'COMPILE_ERROR'; break; case 128: // 128 // $type_str = 'COMPILE_WARNING'; break; case 256: // 256 // $type_str = 'USER_ERROR'; break; case 512: // 512 // $type_str = 'USER_WARNING'; break; case 1024: // 1024 // $type_str = 'USER_NOTICE'; break; case 2048: // 2048 // $type_str = 'STRICT'; break; case 4096: // 4096 // $type_str = 'RECOVERABLE_ERROR'; break; case 8192: // 8192 // $type_str = 'DEPRECATED'; break; case 16384: // 16384 // $type_str = 'USER_DEPRECATED'; break; } $errormessage = '[ '.date(r).' ] '.$type_str.': '.$message.' in '.$file.' on line '.$line."\n"; // for development simply ECHO $errormessage; $file = 'my_errors.log'; file_put_contents($file, $errormessage, FILE_APPEND); } error_reporting(E_ALL); ini_set('display_errors', '0'); set_error_handler('my_error_handler'); ?> 

Related of "Как изменить способ записи PHP ошибок в файл журнала ошибок?"

Вы не можете выполнить какую-либо дополнительную настройку или реализовать какую-либо из этой логики со встроенным обработчиком ошибок, вам нужно будет установить собственный обработчик ошибок с помощью set_error_handler() .

Эта функция выполняет обратный вызов, который будет вызываться, когда PHP сталкивается с ошибкой, и вы можете действовать соответствующим образом.

См. Пример в документах о том, как использовать эту функцию и как реализовать правильный обратный вызов.