Битрикс отслеживание ошибок

  • Система отслеживания ошибок средствами Универсальных списков в Битрикс24
  • Строим архитектуру
  • Фильтр и сортировка ошибок
  • Ограничения и неудобства
  • Другие возможности применения
  • Развитие

Система отслеживания ошибок средствами Универсальных списков в Битрикс24

Многие компании в своей работе сталкиваются с потребностью в использовании системы отслеживания ошибок. Баг-трекера, простым языком. Рассмотрим, как можно использовать возможности Битрикс24 для создания на его основе работающего баг-трекера.

Скажем сразу, описанные возможности не привязаны только к веб-разработке или разработке ПО. Поэтому, мы намеренно называем данный сервис Системой отслеживания дефектов. С помощью сервиса можно организовать передачу сообщений в IT-службу о любых инцидентах или проблемах. Можно построить систему приема заявок от пользователей.


Вам может быть интересно:

Внедрение Битрикс24
Интеграция Битрикс24

Для запуска Системы отслеживания дефектов мы будем использовать механизм Универсальных списков в Битрикс24 (http://www.bitrix24.ru/features/docs.php#lists). Поэтому нам понадобится редакция Компания стоимостью 9990 рублей в месяц. Напоминаем, приобретая лицензию с помощью партнеров компании 1С-Битрикс, можно получить скидку от 5% до 10%.

Конечно, никто не будет использовать Битрикс24 в редакции Компания только для того, чтобы пользоваться Универсальными списками. Но мы ведь с вами рассматриваем решение для бизнеса, верно? Будем считать, что в вашей компании Битрикс24 уже используется совсем для других целей. И вы стремитесь хранить все данные в одном месте, а не распространять их по сети в сторонних сервисах. Пусть даже бесплатных и заслуживающих внимания Redmine (http://www.redmine.org/) и Bugzilla (http://www.bugzilla.org/).

Строим архитектуру

Рассмотрим пример создания баг-трекера для конкретного проекта по разработке сайта.

Универсальные списки могут привязываться к рабочим группам в Битрикс24, а могут использоваться для всех и привязываться к Компании. Рабочая группа является штатным способом ведения проектов. Поэтому, первое, что мы должны сделать – включить в группе функционал Универсальных списков. Перейдите в группу, выберите меню Действия и выберите Редактировать.

Редактирование группы

В открывшемся окне редактирования группы на вкладке Возможности установите флажок Списки.

Включаем списки в группе

После этого на панели группы появится кнопка Списки. Перейдите на страницу Списки и нажмите Добавить.

Добавление списка в группу

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

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

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

Первое, что нам нужно сделать — указать название для списка и изображение (по желанию).

Создаем список

На вкладке Подписи указываем подписи для элементов списка и элементов управления списком. Можно использовать привычное Issue для обозначения ошибки.

Создание списка

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

Настройка доступа к списку

После того, как мы нажмем Сохранить, в разделе Списки появится созданный “Отслеживание ошибок”. Перейдите в список.

Картинка списка

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

Название поля Тип Обязательность Комментарий
ID Счетчик Да
Дата и время создания Дата создания
Тип ошибки Список * Ошибка в коде
* Ошибка в верстке
* Странность в поведении
* Пожелание
Критичность Список * Не критично
* Нормально (по умолчанию)
* Критично
Состояние Список Да * Не принято
* Принято
* Не удалось повторить
* Исправлено
* Не будет исправлено
* Не подтверждено
Описание Текст анонса Использовать визуальный редактор — Да
Ширина и высота элемента управления — 600px на 200px
Скриншоты Файл Множественное — Да

Можно использовать еще поле типа Детальный текст для расширенного описания ошибки.

После создания полей перейдите в список ошибок и нажмите «Create issue». Откроется окно добавления записи об ошибке. Заполните поля информацией и нажмите Сохранить. Отлично, мы сделали первую запись в нашем баг-трекере!

Редактирование элемента списка

Фильтр и сортировка ошибок

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

Фильтр по ответственному

Или найти все “Пожелания”, чтобы проверить, нужно их делать, или нет ))

Отбор с помощью фильтра

И даже такой хитрый фильтр, как “Найти все исправленные баги конкретного ответственного за прошлый месяц” сработает:

Исправлено за прошлый месяц

Ограничения и неудобства

Конечно, описанная технология не идеальна, перечислим несколько очевидных минусов:

Проблема с прикреплением файлов — вам самостоятельно придется делать скриншот, сохранять его на жесткий диск, а только потом загружать в описание ошибки. Это долго и неудобно. Привыкнув к Youtrack с его “Вставить скриншот”, который он сам же и сделает, тяжело перестроиться. Решение — всевозможные сервисы «сделай скриншот и загрузи в сеть по уникальной ссылке». QipShot, Evernote, Awesome Screenshot (дополнение для Chrome) — вот только некоторые из них.

Визуальный редактор. Он однобокий и напоминает виндоус миллениум, не умеет вставлять цитаты и куски кода. Для разработчиков серьезное неудобство.

Цена внедрения. Самый неприятный минус. Как следствие, у многих пользователей описанный функционал не доступен. Мы уже говорили, покупать редакцию Компания только ради Универсальных списков не имеет смысла. Надеемся, компания 1С-Битрикс в будущем пересмотрит политику лицензирования, и Списки станут доступны, например, в редакции Команда.

Другие возможности применения

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

Перечислим возможные применения:

  • Прием заявок от пользователей, или от населения, если вы Управляющая компания.
  • Реестр договоров с хранением отсканированных копий файлов. Мы так долгое время и делали.
  • База данных сотрудников или клиентских аккаунтов, с различными дополнительными полями. Подойдет для пенсионных фондов etc. Есть мнение, что для них возможностей встроенной CRM будет мало.

Развитие

Пусть Список есть, вы успешно работаете с ним и наполняете информацией. Что дальше?

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

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

Итак, мы рассмотрели баг-трекер с возможностью добавления файлов и назначения ответственных. Мы использовали механизм Универсальных списков в Битрикс24 редакции Компания. Просим поделиться в комментариях другими способами применения Универсальных списков. Спасибо за внимание, желаем отсутствия ошибок при разработке!


Вам может быть интересно:

Внедрение Битрикс24
Интеграция Битрикс24

Программисты люди занятые (или ленивые), поэтому они выкатывают проект и переключаются к другим задачам. Если что-то не работает — заказчик сообщит, а ему соответственно пожалуются пользователи. По хорошему, периодически нужно заглядывать в логи ошибок Битрикса на предмет наличия новых записей. Такой рутиной мало кто занимается.

А что если считать ошибки и этот счетчик передавать в уже настроенный мониторинг Zabbix? Добавляем highloadblock ErrorCounter с одним единственным полем «UF_CREATED» типа дата/время со значением по умолчанию — текущее время. Создаем кастомный обработчик ошибок:

namespace MyNamespace\Monitoring;

use Bitrix\Main\Diag\FileExceptionHandlerLog;
use Bitrix\Main\Loader;
use Bitrix\Main\ORM\Data\DataManager;
use Exception;
use Bitrix\Highloadblock\HighloadBlockTable;

Loader::includeModule("highloadblock");

class ExceptionCounter extends FileExceptionHandlerLog {

    /**
     * @param Exception $exception
     * @param int       $logType
     */
    public function write($exception, $logType) {
        parent::write($exception, $logType);

        self::getCounterDataClass()::add([]);
    }

    /**
     * @return DataManager|string
     */
    public static function getCounterDataClass() {
        return HighloadBlockTable::compileEntity("ErrorCounter")->getDataClass();
    }

}

В .settings.php прописываем наш класс в свойство class_name:

  'exception_handling' => 
  array (
    'value' => 
    array (
      'debug' => true,
      'handled_errors_types' => 4437,
      'exception_errors_types' => 4437,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => 
      array (
        'settings' => 
        array (
          'file' => 'error.log',
          'log_size' => 1000000,
        ),
        'class_name' => 'MyNamespace\Monitoring\ExceptionCounter',
      ),
    ),
    'readonly' => false,
  ),

После этого, при возникновении исключения, в счетчик записывается значение. Лог также пишется, как раньше.

Далее дело техники. Делается запрос выбора записей за последние сутки, считается количество результатов. Это и будут данные для наблюдения в Zabbix. Если значение 0, значит ошибок за день не было, если больше 0 — показывать триггер

Если есть сообщение — иду в логи смотреть что произошло, нет — курю бамбук. Момент фильтрации ошибок для счетчика опустил. Бывает что не нужно фиксировать проблему, например если код выполняется администратором из консоли PHP в админке. Отправку данных счетчика в Zabbix выполнил через расширение GraphQL схемы.

Любопытно посмотреть график возникновения ошибок за период:

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

qaa-engineer.ru > Битрикс > Как производить мониторинг ошибок и исключений на сайте, работающем на CMS 1С-Битрикс?

Для мониторинга ошибок и исключений на сайте, работающем на CMS 1С-Битрикс, можно использовать следующие методы:

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

2. Использование специальных компонентов и модулей, которые могут помочь отследить ошибки и исключения в системе и вывести их в удобочитаемом формате. Например, компонент «Отчет об ошибках» позволяет отследить все ошибки, которые произошли в системе, и вывести их в удобной таблице.

3. Использование внешних сервисов мониторинга, таких как Sentry или Bugsnag, которые могут собирать информацию об ошибках и исключениях и отправлять уведомления на email или в социальные сети. Эти сервисы можно интегрировать в 1С-Битрикс, используя специальные модули и плагины.

Обработка ошибок в Битрикс

При разработке под Битрикс можно пользоваться не только логами, установленными в конфигурации сервера, но и своими. Для этого нужно настроить обработчик ошибок в секции exception_handling в файле /bitrix/.settings.php.

'exception_handling' =>
    array (
        'value' =>
            array (
              'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
              'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
              'ignore_silence' => true,
              'assertion_throws_exception' => false,
              'assertion_error_type' => 256,
              'debug' => true,
              'log' => array (
                            'settings' => array (
                            'file' => 'bitrix/modules/error.log',
                            'log_size' => 1000000,
                            ),
            ),
    ),
),
  • handled_errors_types — типы обрабатываемых ошибок

  • exception_errors_types — типы ошибок, в случае которых системой выбрасывается исключение, и работа скрипта останавливается

  • ignore_silence — отменить действие оператора подавления ошибок (значок @ перед функцией, например @file(), документация).

  • assertion_throws_exception — выбрасывают ли утверждения (assert()) исключения.

  • assertion_error_type — тип ошибки для неверного утверждения (по умолчанию — 256 E_USER_ERROR)

  • debug — если выставить debug = true, информация об ошибке будет выведена пользователю в браузер. Если debug = false, при возникновении ошибки будет выведено стандартное сообщение от Битрикс, кроме ошибок E_ERROR | E_PARSE

if ($this->debug)
{
    error_reporting($this->handledErrorsTypes);
    @ini_set('display_errors', 'On');
    @ini_set('display_startup_errors', 'On');
    @ini_set('report_memleaks', 'On');
}
else
{
    error_reporting(E_ERROR | E_PARSE);
}

При отключении режима отладки, также сбрасываются настройки для assert()

if ($this->debug)
{
  assert_options(ASSERT_ACTIVE, 1);
  assert_options(ASSERT_WARNING, 0);
  assert_options(ASSERT_BAIL, 0);
  assert_options(ASSERT_QUIET_EVAL, 0);
  assert_options(ASSERT_CALLBACK, array($this, "handleAssertion"));
}
else
{
   assert_options(ASSERT_ACTIVE, 0);
}
  • log — секция с указанием логгера. Если пусто, то запись ошибок происходить не будет. В данном случае по умолчанию всю работу на себя возьмет объект класса \Bitrix\Main\Diag\FileExceptionHandlerLog.
  • settings — секция с настройками обработчика ошибок. Можно задавать произвольные параметры. Они все передадутся массивом в метод initialize() обработчика.
  • file — относительный путь к файлу логов от корневой директории сайта (\Bitrix\Main\Application::getDocumentRoot().’/’.$file).
  • log_size — максимальный размер файла логов в байтах.

Можно использовать собственный обработчик ошибок для записи логов. Для этого в секции log нужно указать:

'class_name' => 'MyLog',
'extension' => 'MyLogExt',
'required_file' => 'modules/mylog.module/mylog.php'
  • class_name — имя класса-обработчика. Класс должен наследоваться от Bitrix\Main\Diag\ExceptionHandlerLog. Метод write в 16 версии отличается от реализации в 15 версии, эта несовместимость может сломать сайт, будьте внимательны.
  • extension — подключаемое расширение, содержащее класс-обработчик
  • required_file — файл, содержащий нужный класс.

Модули АХТУНГ 500 И АХТУНГ 500 ПРО

Модули Ахтунг 500 и Ахтунг 500 ПРО предназачены для мгновенного оповещения об ошибках по e-mail и через браузер, когда администратор находится на сайте.

Мониторинг ошибок происходит не только через обработчик ошибок Битрикса, но и через чтение файлов логов сервера, есть поиск.

Перейти к подробному описанию Ахтунг 500 ПРО

На странице Журнал ошибок PHP (Настройки > Производительность > Ошибки PHP (N)) можно просмотреть журнал регистрации ошибок PHP, где N — общее количество ошибок.

Примечание: Данная страница отображается, только если в настройках модуля Монитор производительности указана опция Вести журнал предупреждений PHP.

Фильтр

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

Поле Описание
Найти Позволяет найти записи об ошибках по их основным параметрам. Это поле присутствует, даже если фильтр свернут.
Хит Позволяет найти записи по идентификатору хита.
Класс ошибки Позволяет осуществлять поиск в журнале по классу (типу) ошибок.
Файл Позволяет осуществлять поиск в журнале по файлу, в котором произошла ошибка.
Текст Позволяет осуществлять поиск в журнале по тексту ошибки.

Чтобы отфильтровать ошибки по заданным критериям поиска, нажмите кнопку Найти. Для отображения всех ошибок нажмите кнопку Отменить.

Контекстная панель

Кнопка Описание
Группировка Позволяет задать способ группировки записей об ошибках в журнале:

  • Группировка включена — журнал будет содержать поля: Класс ошибки, Файл, Строка, Текст, Количество;
  • Группировка выключена — журнал будет содержать поля: ID, Хит, Класс ошибки, Файл, Строка, Текст.
Настроить Переход к диалогу настройки внешнего вида отчетной формы.
Excel Экспорт данных из отображаемой таблицы в MS Excel.

Ошибки PHP

Поле Описание
ID Идентификатор записи об ошибке в журнале.
Хит Идентификатор хита.
Класс ошибки Класс (тип) ошибки.
Файл Путь к файлу в системе, в котором произошла ошибка.
Строка Номер строки в файле.
Текст Текст ошибки.

© «Битрикс», 2001-2023, «1С-Битрикс», 2023

Наверх

Сложность урока:

1 уровень — интуитивно все понятно из интерфейса, но почитать стоит.


1 из 5

Дата изменения:
23.02.2023

Просмотров:
22321

Недоступно в лицензиях:

Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).


Ограничений нет

  Настройки

На странице Монитор производительности: настройки PHP (Настройки > Производительность > PHP) отображается сводная таблица Параметры окружения с анализом параметров PHP.

Монитор производительности: настройки PHP

С помощью ссылки Настройки PHP можно перейти на страницу с подробной информацией о PHP (phpinfo).

  Ошибки

На странице Монитор производительности: журнал ошибок PHP (Настройки > Производительность > Ошибки PHP (N)) можно просмотреть журнал регистрации ошибок PHP, где N — общее количество ошибок.

Монитор производительности: сервер БД

Примечание: Данная страница отображается, только если в настройках модуля Монитор производительности указана опция Вести журнал предупреждений PHP.

Журнал ошибок PHP ошибок хранится в базе. Удалить журнал ошибок PHP можно с помощью опции

Удалить собранные ранее данные

Доступна только при отключенном мониторе

в настройках модуля Монитор производительности.

1. Создаю в корне сайта файл error.php со следующим содержимым:

<?php
echo show_me_error;
?>

2. Открываю в браузере site.ru/error.php — белый экран

3. Смотрю bitrix/php_interface/dbconn.php:
$DBDebug = true;

4. Смотрю bitrix/php_interface/.settings.php:

...
  array (
    'value' => 
    array (
      'debug' => true,
      'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
      'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
      'ignore_silence' => true,
      'assertion_throws_exception' => false,
      'assertion_error_type' => 256,
      'log' => array (
        'settings' => array (
        'file' => 'bitrix/modules/error.log',
        'log_size' => 1000000,
        ),
      ),  
    ),
    'readonly' => false,
  ),
...

5. Смотрю bitrix/modules/error.log — кучу левых Warning, однако моей ошибки в моём error.php нет
6. Иду в .htaccess:

php_value display_errors 1
php_value error_reporting 7

7. Иду на сервере в /var/log/nginx/error.log — то же самое, ничего о моей ошибке

Как мне на экране при открытии error.php увидеть мою ошибку?

Основное предназначение модуля — быстрое оповещение о случивших на сайте проблемах. Для этого существуют сервисы (агенты), следящие за ошибками (чтение изменений в логах, прямой отлов ошибок в 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' => 'BxSolAchtungProExceptionsHandlerLogger',
                '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 BxSolAchtungProLogger;

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

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

use BxSolAchtungProLogger;

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() и т.д.):

  • Logger::CRIT
  • Logger::DEBUG
  • Logger::DEPRECATED
  • Logger::FATAL
  • Logger::INFO
  • Logger::NOTICE
  • Logger::INFO
  • Logger::MIRACLE
  • Logger::SHIT_HAPPENS
  • Logger::VOVA_POMOGI

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

  • Logger::ALL
  • Logger::COMPILE_ERROR
  • Logger::COMPILE_WARNING
  • Logger::CORE_ERROR
  • Logger::CORE_WARNING
  • Logger::DB_ERROR
  • Logger::ERROR
  • Logger::PARSE
  • Logger::RECOVERABLE_ERROR
  • Logger::UNCATCHABLE_EXCEPTION
  • Logger::USER_DEPRECATED
  • Logger::USER_ERROR
  • Logger::USER_NOTICE
  • Logger::USER_WARNING

Объяснять, что такое логи — нет необходимости. Когда есть логи, то проще разобраться с возникшими проблемами и выяснить, почему они начались. Основные моменты в использовании логов.

Логи не должны занимать всё свободное пространство на диске, т.е. в логи нужно помещать только нужную информацию, а не всё подряд. Устаревшие логи должны удаляться. Для удаления устаревших логов лучше всего настроить задание на cron.

Логи должны быть удобными для изучения — логи с ошибками и логи с диагностическими данными должны помещаться в разные файлы. Желательно разделять логи на временные интервалы — например, ежедневные логи (наиболее распространенный вариант, или, например, по месяцам, или неделям).

Все логи нужно держать в одной папке, чтобы было удобней их изучать (/logs/, /_logs/, /local/logs/ и т.п. ). В целях защиты следует закрыть доступ к папке с логами по http — настраивается в .htacces,

deny from all

и/или добавить к названию файла уникальный идентификатор.

Папку для логов надо предварительно создать и убедиться, что битрикс (веб-сервер) имеет права на запись в нее.

В системе 1С-Битрикс существует 2 вида логов:

ADDMESSAGE2LOG(…)

Это функция из старого ядра. Многие модули пишут через нее отладочную информацию.

Пример настройки места хранения логов, выводимых данной функцией, выглядит так (папка logs/bx должна быть создана):

define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"] . "/logs/bx/" . date("Y-m-d") . ".log");

Прописать данную настройку можно, например, в dbconn.php.

СЕКЦИЯ EXCEPTION_HANDLING В ФАЙЛЕ .SETTINGS.PHP

Это уже функционал нового ядра D7.

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

Пример настройки логов с разделением по дате:

'exception_handling' => array (
  'value' => array (
      'debug' => false, // disables error output to screen
       // ошибки для вывода в лог
      'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_WARNING,
      'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_COMPILE_WARNING,
      'ignore_silence' => true,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => array (
          'settings' => array (
              'file' => "logs/bx_error/" . date("Y-m-d") . ".log",
			  'log_size' => 1000000, // ~ 1Mb per file
          ),
      ),
  ),
  'readonly' => true,
),

ФУНКЦИИ ОТЛАДКИ В ЯДРЕ D7

На замену функции AddMessage2Log в ядре D7 пришли новые функции:

use BitrixMainDiagDebug;
Debug::dumpToFile($_SERVER); // для случаев, когда нужен var_dump
Debug::writeToFile($_SERVER); // когда нужен print_r

Также в ядре D7 появились методы, для измерения времени. В старом ядре аналогов не было.

use BitrixMainDiagDebug;
Debug::startTimeLabel("foo");
foo();
Debug::endTimeLabel("foo");

Debug::startTimeLabel("bar");
bar();
Debug::endTimeLabel("bar");

print_r(Debug::getTimeLabels());

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

Проверяем логи, битрикс окружение

bitrix, nginx, apache, php, mysql, sendmail, cron

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

Для битрикс окружения на centos пути к логам обычно будут такими (зависит от настроек):

  1. Битрикс: __bx_log.log или log.txt в корне сайта. Зависит от переменной LOG_FILENAME в файле /bitrix/php_interface/dbconn.php
  2. Apache: /var/log/httpd/error_log
  3. Nginx: /var/log/nginx/error.log
  4. PHP: /var/log/php/exceptions.log
  5. Почта: /home/bitrix/msmtp_default.log
  6. bash, cron: /var/spool/mail/root и /var/spool/mail/bitrix
  7. bitrixvm: /opt/webdir/temp (логи запущенных задач)

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

И как бонус стоит проверить файл /var/log/btmp командой last -f /var/log/btmp если там очень много попыток авторизации, значит доступ к ssh пытаются «брутфорсить». Стоит изменить порт доступа к ssh (в файле /etc/ssh/sshd_config поменять строку «Port 22» на другое значение, разрешить доступ к новому порту в iptables и перезагрузить sshd) Что бы сбросить лог авторизации нужно выполнить команду cat /dev/null > /var/log/btmp

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 21 апреля 2017 | Обновлено 24 июля 2020

Возврат к списку

Блог «Дивасофт»

23 января 2017, Михаил

В файле bitrix/.settings.php


<?php 
'exception_handling' => 
  array (
    'value' => 
    array (
      'debug' => true,
      'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
      'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => 
      array (
        'settings' => 
        array (
          'file' => 'bitrix/err.log',
          'log_size' => 1000000,
        ),
      ),
    ),
    'readonly' => false,
  )
?>


Логи будут в файле bitrix/err.log

По умолчанию в конфигурации Битрикс отключено логирование ошибок. Для записи ошибок в лог добавляем в файл конфигурации bitrix/.settings.php  секцию:

<?php

'exception_handling' =>

array (

'value' =>

array (

'debug' => true,

'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,

'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,

'ignore_silence' => false,

'assertion_throws_exception' => true,

'assertion_error_type' => 256,

'log' =>        array (         'settings' =>          array (           'file' => 'bitrix/err.log',           'log_size' => 1000000,         ),       ),     ),     'readonly' => false,   ),

?>

Формат ужасный, но другого нет 🙂

Kwork.ru - услуги фрилансеров от 500 руб.

Понравилась статья? Поделить с друзьями:
  • Битрикс отобразить ошибки
  • Битрикс обработчик ошибок
  • Битрикс многосайтовость ошибка 500
  • Битрикс не выводятся ошибки
  • Бинар 5s ошибка 13 как исправить бензин