За чистый и ясный код!

Статьи на тему программирования под веб, используя PHP, MySQL, Jquery и многое другое

Логирование ошибок сайта для Kohana.

Январь27

Файл регистрации, журналирование, логирование — все это одно и тоже и сводится к одному — записи различных действия на носитель. Для чего всё это нужно, ой тут много ответов — для протоколирования какой-нибудь процедуры, для контроля поведения кого-то и тд. В общем дело это нужное, и я хотел бы рассказать как я веду логирование ошибок у себя на сайтах написанных с помощью фреймверка Kohana.

В самой Кохане уже есть логирование на уровне ядра фрейма и оно хорошо работает, записывает в папку application/logs данные о логировании (по-дефолту, управляется всё из файла bootstrap.php, строка Kohana::$log->attach(new Kohana_Log_File(APPPATH.’logs’));). Система формирует структуру папок YYYY/MM/DD.php,
где YYYY — год, когда создался файл, MM — месяц (две цифры) и DD.php сам файл с номеров дня месяца.
Файл заполняется по команде:

try
{
	return $this->_write();
}
catch (Exception $e)
{
	// Log & ignore all errors when a write fails
	Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e))->write();

	return FALSE;
}

само содержание файла лога выглядит так:

2010-10-01 17:54:15 --- ERROR: ReflectionException [ -1 ]: Class controller_contact does not exist ~ SYSPATH\classes\kohana\request.php [ 1094 ]
2010-10-01 17:54:37 --- ERROR: ErrorException [ 4 ]: syntax error, unexpected ';', expecting T_STRING or T_VARIABLE or '$' ~ APPPATH\views\main.php [ 5 ]
2010-10-01 17:56:23 --- ERROR: ReflectionException [ -1 ]: Class controller_contact does not exist ~ SYSPATH\classes\kohana\request.php [ 1094 ]
2010-10-01 17:56:33 --- ERROR: ReflectionException [ -1 ]: Class controller_contact does not exist ~ SYSPATH\classes\kohana\request.php [ 1094 ]
2010-10-01 17:59:58 --- ERROR: ReflectionException [ -1 ]: Class controller_contact does not exist ~ SYSPATH\classes\kohana\request.php [ 1094 ]
2010-10-01 18:28:37 --- ERROR: ErrorException [ 1 ]: Class 'Helper_Html' not found ~ APPPATH\views\form_contact.php [ 37 ]
2010-10-01 18:29:14 --- ERROR: ReflectionException [ -1 ]: Class controller_captcha does not exist ~ SYSPATH\classes\kohana\request.php [ 1094 ]
2010-10-01 18:29:22 --- ERROR: ReflectionException [ -1 ]: Class controller_captcha does not exist ~ SYSPATH\classes\kohana\request.php [ 1094 ]
2010-10-01 18:30:45 --- ERROR: ReflectionException [ -1 ]: Class controller_captcha does not exist ~ SYSPATH\classes\kohana\request.php [ 1094 ]
2010-10-01 18:30:49 --- ERROR: ReflectionException [ -1 ]: Class controller_captcha does not exist ~ SYSPATH\classes\kohana\request.php [ 1094 ]

В принципе вся инфа о падении, добавления своих собственных комментариев и т.д. всё будет фиксироваться. Но мне не очень понравилось то кол-во информации которое я мог почерпнуть из этого файла. Например состояние cookie, что за браузер и тд. Пришлось поискать готовые решения. Такое решение было найдено — kohana-log, что мне тут понравилось, что данные доступны по урлу, что в логе сохраняются следующие данные:

  1. Сама ошибка
  2. IP клиента
  3. uri где произошла ошибка
  4. referer
  5. agent — браузер
  6. cookie

По ссылке http://localhost/path/to/log/day, где day — дата за которую хотим просмотреть лог, вида DD.MM.YYYY. Можно посмотреть лог за текущий или любой день не входя по ФТП или SSH, но были конечно и бока — порой не верный парсинг, отсутствие возможности сохранять свои данные в БД (может и глупо, но было требование заказчика). Для более удобного набора ссылки в браузере, да и человека, я оставил её в виде сео чпу, вообще мне нравятся роутинги фреймворков, которые позволяют сделать чпу-ссылки, а не ссылки в виде набора параметров. Также есть еще ссылка, для загрузки лога, в виде чпу http://localhost/path/to/log/download/day (эту ссылку я уже добавил с своей версии).

Более подробно на странице плагина.

Я немного переписал плагин, починил парсинг, добавил возможность загрузки лога к себе на машину и также добавил возможность сохранять данные лога в БД.

Для логирования в файл нужно в bootstrap.php написать следующий код

Kohana::$log->attach(new Log_Writer_File(APPPATH.'logs'));

Для логирования в БД нужно в bootstrap.php написать следующий код

Kohana::$log->attach(new Log_Writer_Database);

Также для БД нужно сделать табличку

CREATE TABLE IF NOT EXISTS `logs` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `level` enum('EMERGENCY','CRITICAL','ERROR','WARNING','NOTICE','INFO','DEBUG') COLLATE utf8_unicode_ci DEFAULT 'INFO',
  `message` varchar(5000) COLLATE utf8_unicode_ci DEFAULT NULL,
  `client` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `uri` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
  `referer` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
  `agent` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
  `cookie` varchar(2000) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Логирование ошибок сайта' AUTO_INCREMENT=1 ;

Пример просмотра лога можно увидеть тут, а скачать исходники моего переделанного модуля логирования тут.

Удачного дебага и профилирования.

Статья просмотренна 708504 раз, зашло посетителей 71780

рубрика: Kohana

7 комментариев в “Логирование ошибок сайта для Kohana.”

  1. Avatar
    Ren пишет:

    Поставил данный модуль. Все работает, но нашел баг. Если при открытии страницы с ссылкой на несуществующий файл, например изображение, слетает сессия. Т.е. если был залогинен то приходиться входить на сайт заново. WIN 7 XAMMP
    Не наблюдается такой баг?


  2. Avatar
    maxnag пишет:

    Знаете, затрудняюсь ответить, возможно такое и было, возможно пофиксил, не придав значение.


  3. Avatar
    seyfer пишет:

    throw new Session_Exception('Error reading session data.', NULL, Session_Exception::SESSION_CORRUPT);

    У вас по ссылке с примером.


  4. Avatar
    maxnag пишет:

    Спасибо большое за каммент. Поправил, теперь работает.


  5. Avatar
    Евгений пишет:

    Подскажите, пожалуйста, как Вы решили проблему с ошибкой чтения сессии. Я не использую вышеописанный модуль, использую стандарный модуль Kohan Auth. Точно так же как описал Ren слетает сессия (и авторизация в том числе). Буду очень признателен за помощь.


  6. Avatar
    maxnag пишет:

    А какой драйвер сессии используете? Native, DB, cookie?


  7. Avatar
    maxnag пишет:

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


не публикуется

пример

Оставить комментарий или два:

  

Облако тегов

cli csv dump events form Kohana locale models MySQL mysqldump orm PHP tools trigger validate газ газовый счетчик итоги кеширование переменные

Облако тегов плагина WP Cumulus для WordPress требует для просмотра Flash Player 9 или выше.

Я на твиттере!

  • у твиттера тоже бывают перерывы...

Календарь

Январь 2012
Пн Вт Ср Чт Пт Сб Вс
« Ноя   Янв »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Сейчас на сайте