1С-Битрикс

AddMessage2Log в 1С-Битрикс: полное руководство по отладке и логированию

Полное руководство по использованию AddMessage2Log в 1С-Битрикс. Как правильно вести журнал отладки, где найти записи и как использовать функцию для диагностики ошибок

sqlka.ruОпубликовано: Чтение: 5 мин.
AddMessage2Log в 1С-Битрикс: полное руководство по отладке и логированию

Функция AddMessage2Log — один из ключевых инструментов отладки в экосистеме 1С-Битрикс. Она позволяет разработчикам и администраторам записывать произвольные сообщения в системный журнал событий, что значительно упрощает диагностику проблем, отслеживание выполнения скриптов и анализ работы кастомного кода.

Что такое AddMessage2Log и зачем она нужна?

AddMessage2Log() — встроенная функция 1С-Битрикс для записи отладочной информации в специальный журнал. В отличие от var_dump() или echo, которые выводят данные напрямую в браузер и могут нарушить работу сайта, эта функция сохраняет сообщения в структурированном лог-файле, доступном даже при фатальных ошибках.

Основные применения:

  • Отслеживание выполнения сложных алгоритмов
  • Логирование значений переменных в критических точках кода
  • Диагностика ошибок в пользовательских полях и компонентах
  • Мониторинг выполнения агентов и фоновых задач
  • Анализ работы API-интеграций со сторонними сервисами

Синтаксис и параметры функции

Базовый синтаксис функции выглядит следующим образом:

AddMessage2Log(
    mixed $message,      // Сообщение для записи в лог
    string $module = "", // Идентификатор модуля (опционально)
    int $traceDepth = 6, // Глубина трассировки стека
    bool $showArgs = false // Показывать аргументы функций в стеке
);

Параметры подробно:

  1. $message — может быть строкой, массивом, объектом или любым другим типом данных. Функция автоматически преобразует его в читаемый формат.
  2. $module — название модуля, к которому относится запись. Если указать "main" или оставить пустым, запись пойдет в общий журнал.
  3. $traceDepth — определяет, сколько уровней стека вызовов будет отображено (по умолчанию 6).
  4. $showArgs — если установлено в true, в стеке вызовов будут отображаться аргументы каждой функции.

Практические примеры использования

Пример 1: Базовая запись в лог

<?php
// Простая текстовая запись
AddMessage2Log("Начало выполнения скрипта обработки заказа");

// Запись с указанием модуля
AddMessage2Log("Пользователь ID: " . $USER->GetID(), "sale");

// Логирование массива
$orderData = ["ID" => 15487, "PRICE" => 5400];
AddMessage2Log($orderData, "sale.order");
?>

Пример 2: Отладка выполнения условий

<?php
if ($someCondition) {
    AddMessage2Log("Условие выполнено, переменная \$value = " . $value, "custom.module");
    // Действия при выполнении условия
} else {
    AddMessage2Log("Условие НЕ выполнено, проверяемые данные: ", "custom.module");
    AddMessage2Log($_REQUEST, "custom.module"); // Логируем массив REQUEST
}
?>

Пример 3: Логирование работы агента

<?php
function myCustomAgent() {
    $startTime = microtime(true);
    
    // Основная логика агента
    // ...
    
    $executionTime = microtime(true) - $startTime;
    AddMessage2Log("Агент выполнен за " . round($executionTime, 4) . " сек.", "main.agent");
    
    return "myCustomAgent();";
}
?>

Где найти записи AddMessage2Log?

Способ 1: Административный раздел Битрикс

  1. Перейдите в раздел «Настройки» → «Техническая поддержка» → «Журнал событий»
  2. В фильтре выберите «Тип события» → «Отладочная информация»
  3. Для удобства фильтрации укажите название модуля, если вы его использовали

Способ 2: Прямой доступ к файлам логов

Файлы логов хранятся по пути:

/bitrix/modules/[имя_модуля]/log/

Для записей без указания модуля или с модулем "main":

/bitrix/modules/main/log/

Способ 3: Просмотр через консоль (SSH)

# Просмотр последних 100 записей основного лога
tail -n 100 /home/bitrix/www/bitrix/modules/main/log/[дата]_[хэш].log

# Поиск записей по ключевому слову
grep -r "обработка заказа" /home/bitrix/www/bitrix/modules/*/log/

Продвинутые техники и лучшие практики

1. Создание обертки для удобного логирования

<?php
function debugLog($data, $label = "", $module = "custom.debug") {
    if (defined("DEBUG_ENABLED") && DEBUG_ENABLED === true) {
        $message = $label ? "[$label] " . print_r($data, true) : print_r($data, true);
        AddMessage2Log($message, $module, 8, true);
    }
}

// Использование
define("DEBUG_ENABLED", true); // Включаем только на тестовом сервере
debugLog($_SESSION, "Текущая сессия пользователя");
debugLog($arResult, "Результат работы компонента", "news.list");
?>

2. Логирование с разными уровнями важности

<?php
class CustomLogger {
    const LEVEL_INFO = "INFO";
    const LEVEL_ERROR = "ERROR";
    const LEVEL_DEBUG = "DEBUG";
    
    public static function log($message, $level = self::LEVEL_INFO, $module = "custom") {
        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3);
        $caller = isset($backtrace[2]) ? $backtrace[2]['function'] : 'unknown';
        
        $logMessage = sprintf("[%s] %s | %s: %s", 
            date("Y-m-d H:i:s"), 
            $level, 
            $caller,
            print_r($message, true)
        );
        
        AddMessage2Log($logMessage, $module);
    }
}

// Использование
CustomLogger::log("Запуск импорта товаров", CustomLogger::LEVEL_INFO, "catalog.import");
CustomLogger::log($connectionError, CustomLogger::LEVEL_ERROR, "catalog.import");
?>

Частые ошибки и решения

Проблема 1: Записи не появляются в логах

Решение: Проверьте настройки производительности:

  1. Перейдите в «Настройки» → «Настройки продукта» → «Производительность»
  2. Убедитесь, что в разделе «Отладочная информация» включен пункт «Записывать отладочную информацию в log-файл»
  3. Проверьте права на запись в папку /bitrix/modules/*/log/

Проблема 2: Лог-файлы слишком быстро растут

Решение: Настройте автоматическую очистку:

<?php
// Агент для очистки старых логов (добавить в init.php или как отдельный агент)
function clearOldDebugLogs() {
    $daysToKeep = 7; // Храним логи 7 дней
    $logPath = $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/*/log/";
    
    foreach(glob($logPath) as $moduleDir) {
        $logDir = $moduleDir . "log/";
        if(is_dir($logDir)) {
            $files = glob($logDir . "*.log");
            $now = time();
            
            foreach($files as $file) {
                if(is_file($file) && ($now - filemtime($file) >= $daysToKeep * 86400)) {
                    unlink($file);
                }
            }
        }
    }
    
    return "clearOldDebugLogs();";
}
?>

Проблема 3: Конфликт имен модулей

Решение: Используйте уникальные идентификаторы модулей:

<?php
// Вместо AddMessage2Log($data, "custom");
// Используйте AddMessage2Log($data, "mycompany.custommodule");
AddMessage2Log("Начало синхронизации", "mycompany.syncservice.v1");
?>

Альтернативные методы отладки

Хотя AddMessage2Log является мощным инструментом, в некоторых случаях могут быть полезны и другие подходы:

  • Bitrix Event Log — для критических событий и ошибок
  • Монитор производительности — для анализа времени выполнения
  • Xdebug или Tideways — для профессионального профилирования
  • Логи веб-сервера — для анализа HTTP-запросов

Оптимизация инфраструктуры для работы с логами

Для проектов с интенсивным логированием важно обеспечить соответствующую инфраструктуру. Быстрые SSD-диски значительно ускоряют запись и чтение лог-файлов, особенно при активной отладке. Современные VDS-решения, такие как FirstVDS, предлагают дисковые массивы NVMe, которые обеспечивают скорость записи до 3500 МБ/с — это позволяет вести детальное логирование без влияния на производительность сайта. При переходе с обычного хостинга можно использовать промокод 6481180955 для получения дополнительного дискового пространства под логи и резервные копии.

Правильное использование AddMessage2Log в сочетании с правильно настроенной инфраструктурой позволяет создавать отказоустойчивые и легко отлаживаемые решения на платформе 1С-Битрикс.

Хотите освоить SQL для работы с данными?

В SQLka можно изучать SQL последовательно или готовиться к собеседованиям. Запросы выполняются прямо в браузере — устанавливать базу данных не нужно.

sqlka.ru

support@sqlka.ru

Дальше по теме

1С-Битрикс

Логирование в 1С-Битрикс: полное руководство для разработчика

Полное руководство по логированию в 1С-Битрикс: какие логгеры есть, как их настроить, форматировать сообщения и подключать к своим классам. Примеры кода и советы по использованию PSR-3

sqlka.ruЧтение: 4 мин.
← Все статьи