Как прочитать огромные файлы журнала регистрации 1С (.lgp) и найти причину их аномального роста?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с журналом регистрации (ЖР) в 1С — это стандартная задача для администратора или разработчика, но когда файл лога начинает занимать десятки гигабайт (например, 24 ГБ за один час), стандартные средства просмотра 1С становятся бесполезными. В такой ситуации попытка открыть журнал через конфигуратор или в режиме «1С:Предприятие» приводит к зависанию сеанса или критическому потреблению оперативной памяти. Рассмотрим эффективные методы анализа таких файлов, инструменты для их быстрого чтения и способы устранения причин аномального роста данных.

Анализ структуры текстового формата (.lgp)

Прежде чем приступать к выбору инструментов, разберем, что представляет собой файл .lgp. Это текстовый документ в кодировке UTF-8 с BOM. Каждая запись в нем — это блок данных, заключенный в фигурные скобки {}, где поля разделены запятыми. Первое поле — это метка времени, представленная в виде числа (смещение в десятитысячных долях секунды от начала эпохи). Понимание того, что это обычный текст, дает нам возможность использовать внешние инструменты, которые работают гораздо быстрее встроенных механизмов 1С.

Использование специализированных текстовых редакторов

Для быстрого «взгляда» на файл размером 20–100 ГБ обычные редакторы вроде Notepad++ или встроенного блокнота не подойдут — они попытаются загрузить весь файл в память. Проанализируем более профессиональные решения:

  1. EmEditor: Один из самых быстрых редакторов для работы с огромными текстовыми файлами. Он поддерживает многопоточное открытие и позволяет мгновенно перемещаться по файлу без лагов. Как показывает практика, даже в файле объемом 24 ГБ можно за секунды обнаружить повторяющиеся однотипные записи, которые и являются причиной разрастания.
  2. Large Text File Viewer: Бесплатная утилита, предназначенная исключительно для чтения. Она не загружает файл в память целиком, а считывает его порциями.

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

Использование консольных инструментов (PowerShell и Git Bash)

Если нам нужно не просто «посмотреть» файл, а найти конкретные события или подсчитать количество ошибок, лучше всего воспользоваться потоковой обработкой. Это позволяет не открывать файл визуально, а обрабатывать его как поток данных.

Вариант через PowerShell:
Для получения последних строк файла (чтобы понять, что происходит в системе прямо сейчас) используем команду Get-Content с параметром Tail. Это работает мгновенно даже на файлах в 100 ГБ.

Get-Content "C:\1C_Logs\20231027100000.lgp" -Tail 100

Для поиска конкретной ошибки в огромном массиве данных можно использовать Select-String:


Select-String -Path "C:\1C_Logs\*.lgp" -Pattern "Ошибка при печати" | Export-Csv -Path "found_errors.csv"

Вариант через Linux-утилиты (Git Bash / WSL):
Утилита grep является эталоном скорости при поиске в текстовых логах. Выясним причину зацикливания, выделив только уникальные записи за определенный период:


grep "2023102712" giant_file.lgp | awk -F, '{print $4}' | sort | uniq -c | sort -nr

Эта команда выберет все записи за 12-й час, выделит четвертое поле (код события), подсчитает количество повторений и отсортирует их по популярности. Так мы сразу увидим «виновника» торжества.

Перевод журнала регистрации в формат SQLite (.lgd)

В современных версиях платформы 1С (8.3.5 и выше) реализована возможность смены формата журнала регистрации с текстового на базу данных SQLite. Это значительно упрощает анализ, так как к журналу можно будет обращаться с помощью стандартных SQL-запросов.

Как изменить формат:

  1. Запустите 1С в режиме Конфигуратора.
  2. Перейдите в меню Администрирование — Настройка журнала регистрации.
  3. Нажмите гиперссылку Изменить формат.
  4. Выберите формат базы данных и подтвердите преобразование.

Важные нюансы формата SQLite:

Программный парсинг средствами 1С

Если внешние инструменты недоступны, можно написать простую обработку на 1С для построчного чтения файла. Главное — использовать объект ЧтениеТекста, а не пытаться прочитать файл целиком.

Проанализируем пример кода для поиска повторяющихся событий:


Текст = Новый ЧтениеТекста("C:\Logs\large_log.lgp", КодировкаТекста.UTF8);
Счетчик = 0;
Строка = Текст.ПрочитатьСтроку();

Пока Строка <> Неопределено Цикл
    // Простейший парсинг: ищем вхождение строки ошибки
    Если Найти(Строка, "ИмяСобытия") > 0 Тогда
        Счетчик = Счетчик + 1;
    КонецЕсли;
    
    Строка = Текст.ПрочитатьСтроку();
    // Ограничим выборку для теста, чтобы не ждать вечность
    Если Счетчик > 100000 Тогда 
        Прервать;
    КонецЕсли;
КонецЦикла;

Сообщить("Найдено совпадений: " + Счетчик);

Такой подход медленнее grep, но позволяет работать в привычной среде 1С. Полученные данные можно загружать в ТаблицаЗначений и анализировать с помощью Запрос к этой таблице (через временные таблицы).

Дополнительная диагностика: Технологический журнал

Если ЖР разрастается из-за ошибок, которые не дают информативного описания (например, просто «Ошибка при выполнении»), стоит подключить Технологический журнал (ТЖ). В файле logcfg.xml можно настроить сбор событий EXCP (исключения) и CALL. ТЖ зафиксирует не только факт ошибки, но и контекст выполнения кода, вплоть до конкретной строки модуля, где произошло зацикливание или сбой.

Профилактика и рекомендации

Чтобы не сталкиваться с проблемой 24-гигабайтных файлов в будущем, рекомендуем выполнить следующие настройки:

  1. Настройка уровня детализации: В настройках ЖР установите флаг Регистрировать только ошибки и предупреждения, если вам не требуется аудит каждого захода пользователя и изменения каждого документа.
  2. Разделение файлов: В текстовом формате обязательно настройте разделение по дням (в некоторых случаях — по часам). Это позволит оперативно удалять старые логи и работать с файлами меньшего размера.
  3. Мониторинг дискового пространства: Настройте скрипт мониторинга (например, на Zabbix или через PowerShell), который будет оповещать администратора, если размер папки srvinfo начинает расти со скоростью более 1 ГБ в час.
  4. Использование ClickHouse: Для систем с экстремально высокой нагрузкой рассмотрите вариант экспорта ЖР во внешнюю аналитическую БД ClickHouse. Это обеспечит мгновенный поиск по миллиардам записей.

Подводя итог: если вы столкнулись с огромным логом, начните с EmEditor для визуальной оценки или PowerShell/Tail для быстрого получения последних строк. Выявив паттерн ошибки, вы сможете быстро локализовать проблемный участок кода и предотвратить дальнейшее разрастание журнала.

← На главную