Ахтунг 500 Про

Основное предназначение модуля — быстрое оповещение о случивших на сайте проблемах. Для этого существуют сервисы (агенты), следящие за ошибками (чтение изменений в логах, прямой отлов ошибок в PHP), и сервисы, отправляющие оповещения на e-mail, либо в браузер доверенному лицу.

Для экономии места и удобства работы записываются только уникальные ошибки. У них обновляются дата последнего возникновения и количество повторов.

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

Сохраняемые данные

Внешний вид ленты логов Битрикс Ахтунг 500 Про

Поле
Дата первого возникновения Микросекунды с 1.1.1970
Т.к. пишутся только уникальные ошибки, чтобы понять очередность их возниковения, время пишется в микросекундах
Дата последнего возникновения Микросекунды с 1.1.1970.
Число повторов Сколько раз наблюдалась ошибка.
Тип (уровень) Warning, notice etc.
Ошибка (сообщение) Содержимое ошибки, сама запись.
Трейс При наличии.
Игнорировать Отправлять ли оповещения о данной ошибке или нет.

Поиск по логам

Поиск можно делать по полям: дата последнего возникновения, тип ошибки, текст ошибки, источник (по данным из какого файла искать).

Поиск по логам в модуле для Битрикс Ахтунг 500 Про

Если заполнены все поля, запрос поиска можно представить так:

SELECT * FROM `logs`
WHERE
`last_date` >= $lastDate
AND `type` IN ("@type1","@type2")
AND (`message` LIKE "%$text%" OR `trace` LIKE "%$text%")
AND `file_id` IN (@fileId1, @fileId2)

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

Подключение обработчика ошибок PHP

Используется стандартный механизм Битрикс. Логгер будет вызван функциями set_error_handler, set_exception_handler, register_shutdown_function

Чтобы подключить логгер нужно прописать настройки в файле bitrix/.settings.php в секции exception_handling

'exception_handling' => array(
        'value' => array(
            'debug' => false,
            'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED,
            'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED,
            'ignore_silence' => false,
            'assertion_throws_exception' => true,
            'assertion_error_type' => 256,
            'log' => array(
                'class_name' => '\BxSol\AchtungPro\ExceptionsHandler\Logger',
                'required_file' => 'modules/bxsol.achtungpro/lib/ExceptionsHandler/Logger.php',
                //либо
                'required_file' => 'modules/bxsol.achtungpro/lib/ExceptionsHandler/LoggerOld.php',
            ),
        ),
        'readonly' => false
    ),

Битрикс меняли формат ExceptionsHandler, поэтому реализовано 2 варианта логгера, точные настройки есть на странице настройки модуля. Читать подробнее об обработке ошибок в Битрикс.

Чтение файлов логов

В настройках модуля нужно просто указать абсолютный путь к файлу. Поддерживаемые типы: PHP Error log, TimeWeb error log, Apache error log.

Форматы лог файлов

Php error log

[29-May-2016 22:32:39 Europe/Moscow] PHP Fatal error: error message

Apache Error log

[29-May-2016 22:32:39 Europe/Moscow] [php fatal error] error message

Time Web Error Log

[Mon May 02 07:23:29 2016] [error] [client **.***.**.**] Error_Type Error_Message

Ведется работа над чтением логов любого формата.

Скрипт считывает только новые данные, с того места, где остановился в прошлый раз. Но если файл был очищен, и в него добавились новые записи, все они будут учтены.

Агенты

Крайне рекомендуем поставить в cron запуск агентов анализа файлов и отправки оповещений. Если у вас сейчас агенты выполняются на клиентах, это снизит нагрузку и добавит стабильности. А если агенты уже выполняются на кроне, то защитит от неисправности агентов других модулей.

Агент анализа файлов:

[АБСОЛЮТНЫЙ_ПУТЬ_НА_СЕРВЕРЕ]/bitrix/modules/bxsol.achtungpro/cron/FilesListener.php

Агент отправки писем:

[АБСОЛЮТНЫЙ_ПУТЬ_НА_СЕРВЕРЕ]/bitrix/modules/bxsol.achtungpro/cron/EmailSender.php

В данных файлах требуется указать значение переменной $_SERVER['DOCUMENT_ROOT']

Логгер для разработчиков

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

При этом вы получите уведомление на почту или сразу в браузер, если в данный момент находитесь сайте. Держите процессы на сайте под полным контролем!

use BxSol\AchtungPro\Logger;

CModule::IncludeModule('bxsol.achtungpro');
Logger::info('Yandex market uploading done');

Если нет желания запускать полную инициализацию модуля, достаточно подключить файл логгера.

use BxSol\AchtungPro\Logger;

require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/bxsol.achtungpro/lib/Logger.php';
Logger::info('Yandex market uploading done');

Впрочем для аккаунта разработчика модуль подключается всегда, т.к. отпраляются оповещения в браузер об ошибках.

Общий синтаксис

class Logger
{
 ...
    /**
     * @param string $message - сообщение
     * @param string $type - уровень (notice, warning)
     * @param bool $withTrace - записывать трейс или нет. Причем вызов логгера будет удалён из трейса.
     */
    public static function log($message, $type, $withTrace = true)
 ...
}

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

Функции краткого вызова

Вызов Тип Трейс
Logger::crit($message) CRIT Всегда
Logger::debug($message, $withTrace = true) DEBUG По умолчанию есть
Logger::deprecated($message, $withTrace = true) DEPRECATED По умолчанию есть
Logger::fatal($message) FATAL Всегда
Logger::info($message, $withTrace = false) INFO По умолчанию нет
Logger::notice($message, $withTrace = true) NOTICE По умолчанию есть
Logger::strict($message, $withTrace = true) STRICT По умолчанию есть
Logger::warning($message, $withTrace = true) WARNING По умолчанию есть
Альтернативные события
Вызов Тип Трейс
Logger::miracle($message, $withTrace = true) MIRACLE По умолчанию есть
Logger::shit($message, $withTrace = true) SHIT_HAPPENS По умолчанию есть
Logger::vovaPomogi($message) VOVA_POMOGI Всегда

Полный список возможных типов (уровней) ошибок

Ошибки с кратким вызовом (Logger::info() и т.д.):

Остальные типы: