2015-11-30 3 views
0

Я хочу записать все ошибки, которые генерируются whit error_reporting (E_ALL); в файле журнала. Таким образом, вы нормально заметили ошибку, когда в скрипте PHP есть ошибка. Я попробовал многие вещи, но ближе всего, что я пришел был йотаОбработка журнала ошибок в пользовательском файле

asdasc(); // generate error 
$i=error_get_last(); 
if($i['message']!==''){ 
error_log(date('Y-m-d-h:m:s') . " | type = " .$i ['type']." message = " .$i ['message']." file = " .$i ['file']." line = " .$i ['line'] , 3, "my-errors.log");} 

Таким образом, я вижу, что произошла ошибка в дате, но то, что я хочу видеть то, что ошибка я должен увидеть, если он был на шахте экран. что-то вроде:
SQLSTATE [HY000] [1045] Доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: НЕТ) ИЛИ Неустранимая ошибка: вызов неопределенной функции blabla() в C: \ xampp \ htdocs .. . \ index.php в строке 125

Есть ли способ сделать это?

thnx в продвинутом состоянии.

+0

Да! Обработайте ошибки расширения доступа к базе данных в вашем коде. Покажите некоторый пример кода доступа к базе данных и сообщите нам, какое расширение доступа к базе данных вы используете – RiggsFolly

+0

привет, спасибо за ваш ответ, но я действительно не нуждаюсь в нем только для ошибок привязки базы данных (если я правильно понимаю вас), но все ошибки, я внес в редакцию мой вопрос. так что ошибка как неопределенная функция. – hexedecimal

+0

Лучший код обработки ошибок, который вы можете написать, - нет. Шутки в сторону. Просто позвольте программе аварийно завершить работу и настроить директиву [error_log] (http://php.net/manual/en/errorfunc.configuration.php#ini.error-log) по вашему вкусу. –

ответ

1

Использование error_get_last():

error_log(date('Y-m-d-h:m:s') . " | error = " . print_r(error_get_last(), true), 3, "my-errors.log"); 

Также Вы можете создать свой собственный класс обработки ошибок в приложении:

class MyErrorHandlerClass 
{ 
    public function MyErrorHandlerMethod($errno, $errmsg, $filename, $linenum, $vars) 
    { 
     // log you error 
    } 
} 

Затем вы можете определить свой собственный обработчик ошибок:

$ErrorHandler = new MyErrorHandlerClass(); 
set_error_handler(array($ErrorHandler, 'MyErrorHandlerMethod')); 

error_reporting() кстати. не генерирует ошибок, он только контролирует уровень отображения ошибок. При возникновении ошибки всегда отслеживается трассировка стека.

+0

хорошее мышление, но unfortanaly единственное, что я получаю в файле журнала: 2015-12-02-09: 12: 22 | error = – hexedecimal

+0

Вызов неустановленной функции приведет к фатальной ошибке. Чтобы справиться с этим, вы можете использовать 'register_shutdown_function()', как описано в этом [пример] (http://php.net/manual/en/function.error-get-last.php#92810) –

Смежные вопросы