Журнал регистрации в платформе 1С:Предприятие 7.7 фиксирует действия пользователей, системные события и ошибки. Со временем объем журнала существенно увеличивается, в связи с чем администраторы выполняют его периодическую архивацию. В каталоге SYSLOG базы данных формируются ZIP-архивы, содержащие упакованные текстовые файлы журнала. Рассмотрим, какими способами можно открыть и проанализировать архивные данные, а также как обойти проблему зависания платформы при обработке логов большого объема.
Платформа 1С 7.7 содержит встроенный механизм прозрачной работы с упакованными архивами логов. Проанализируем, как устроен этот процесс:
Администрирование — Монитор пользователей в Конфигураторе).Сервис — Журнал регистрации.SYSLOG, распакует его содержимое во временную папку и выведет список событий на экран.Важный нюанс: если при создании архива через Монитор был установлен пароль, платформа запросит его ввод перед распаковкой.
При попытке открыть архив значительного размера (более 50–100 МБ в распакованном виде) штатный интерфейс 1С 7.7 часто зависает на длительное время или аварийно закрывается. Выясним причину такого поведения:
1cv7.mlg выполняются в основном потоке интерфейса, полностью блокируя отклик программы.Для ускоренного чтения объемных архивов без зависания интерфейса применяется класс ПоставщикДанныхЖурналРегистрации из библиотеки 1CPP в связке с компонентой FormEx. Этот подход реализует виртуальное табличное поле, считывающее данные порциями.
Разберем по шагам, как запустить и настроить готовую обработку для чтения лога:
1cpp.dll и formex.dll. Загрузка обычно выполняется в процедуре ПриНачалеРаботыСистемы глобального модуля:
Если ЗагрузитьВнешнююКомпоненту("1cpp.dll") = 0 Тогда
Предупреждение("Не удалось загрузить 1cpp.dll");
КонецЕсли;
Если ЗагрузитьВнешнююКомпоненту("formex.dll") = 0 Тогда
Предупреждение("Не удалось загрузить formex.dll");
КонецЕсли;
ТестТабличногоПоляПоставщикДанныхЛог.ert).СервисРасшФормы/методов привязок, необходимо отключить код управления размерами элементов. В модуле формы закомментируем или удалим вызовы методов привязки в процедуре ПриИзмененииРазмераОкна() и событиях FormEx:
Процедура ПриИзмененииРазмераОкна(ТипСобытия, Ширина, Высота)
// Закомментируем вызовы нестандартных классов привязок при их отсутствии
// КлассПривязок.ИзменитьРазмер(Ширина, Высота);
КонецПроцедуры
Такой подход обеспечивает мгновенный скроллинг по архивам журнала регистрации любого объема без перегрузки памяти.
Распаковав ZIP-архив стандартным архиватором, мы получаем файл 1cv7.mlg, представляющий собой текстовый документ в кодировке Windows-1251 (ANSI) с разделителем ; (точка с запятой).
Строка файла имеет следующий формат:
ГГГГММДД;ЧЧ:ММ:СС;Пользователь;Режим;Категория;Событие;Код;Описание;Идентификатор;Представление
Рассмотрим, как потоково прочитать и отфильтровать распакованный файл встроенными средствами 1С с помощью объекта Текст, исключая нехватку оперативной памяти:
Процедура ПрочитатьАрхивныйЛог(ПутьКФайлу)
ТекстЛога = СоздатьОбъект("Текст");
ТекстЛога.Открыть(ПутьКФайлу);
КоличествоСтрокФайла = ТекстЛога.КоличествоСтрок();
Для НомерСтроки = 1 По КоличествоСтрокФайла Цикл
Стр = ТекстЛога.ПолучитьСтроку(НомерСтроки);
// Построчная обработка и фильтрация без загрузки всего файла в память
Если Найти(Стр, "Document.РасходнаяНакладная") > 0 Тогда
Сообщить(Стр);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Также распакованный 1cv7.mlg можно открыть в специализированных текстовых редакторах для больших файлов (EmEditor, Notepad++) либо загрузить в СУБД (MS SQL Server, PostgreSQL, SQLite) как CSV-файл для выполнения быстрых SQL-запросов и построения отчетов аудита.