Журнал регистрации (ЖР) в платформе 1С:Предприятие — это важнейший инструмент для аудита действий пользователей и анализа технических сбоев. Однако со временем его объем может вырасти до сотен гигабайт, что существенно снижает производительность системы и затрудняет администрирование базы данных. Иногда перед администраторами или разработчиками возникает специфическая задача: удалить записи журнала регистрации по конкретному пользователю (например, для очистки следов тестовых учетных записей, в целях соблюдения конфиденциальности или исправления ошибок интеграции). Для детального анализа активности конкретных учетных записей можно использовать отчет для мониторинга действий пользователей по данным журнала регистрации.
Стандартное сокращение журнала регистрации через Конфигуратор позволяет очищать логи только за определенный период целиком, без фильтрации по автору действий. В этой статье мы подробно разберем, как решить задачу выборочного удаления записей ЖР по конкретному пользователю для разных форматов хранения данных.
Прежде чем приступать к очистке, нам необходимо выяснить, какой формат журнала регистрации используется в вашей информационной базе. Метод очистки напрямую зависит от этого параметра:
1Cv8.lgd): Появился в платформе начиная с версии 8.3.5. Все события записываются в один файл базы данных SQLite. В версиях платформы начиная с 8.3.22 поддержка этого формата была полностью прекращена из-за проблем с блокировками в высоконагруженных системах..lgf и .lgp): Это текстовый последовательный формат, который сейчас используется по умолчанию на всех современных версиях платформы. Данные здесь разделены по периодам на множество мелких файлов с расширением .lgp, а структура описывается файлом 1Cv8.lgf. Также создаются файлы индексов .lgx для быстрого поиска.Рассмотрим детальные инструкции для каждого из этих форматов.
---
ОчиститьЖурналРегистрации() (только для формата SQLite / LGD)Если в вашей базе данных все еще используется формат журнала регистрации .lgd, платформа предоставляет удобный штатный метод для программной очистки. Этот метод позволяет применить фильтр по пользователю.
Для выполнения этой процедуры напишем и запустим обработку со следующим кодом:
// Создаем структуру фильтра для очистки
ФильтрОчистки = Новый Структура;
// Находим целевого пользователя информационной базы
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ");
Если ПользовательИБ <> Неопределено Тогда
// Заполняем фильтр объектом пользователя
ФильтрОчистки.Вставить("Пользователь", ПользовательИБ);
// Вызываем метод очистки журнала регистрации
ОчиститьЖурналРегистрации(ФильтрОчистки);
ВызватьИсключение "Журнал успешно очищен для пользователя ИвановИИ";
Иначе
Сообщить("Пользователь не найден в системе!");
КонецЕсли;
Важное примечание: Если пользователь уже был физически удален из списка пользователей ИБ, то передать объект ПользовательИнформационнойБазы не получится. В таком случае в фильтр нужно передать строковое имя пользователя:
ФильтрОчистки = Новый Структура;
ФильтрОчистки.Вставить("Пользователь", "УдаленныйПользователь");
ОчиститьЖурналРегистрации(ФильтрОчистки);
Помните, что данный метод выбросит исключение (вызовет ошибку), если база данных использует современный текстовый формат .lgp.
---
Если программный метод по какой-то причине не подходит, мы можем отредактировать файл базы данных журнала регистрации 1Cv8.lgd напрямую через СУБД SQLite. Для этого нам понадобится бесплатная графическая утилита, например, DB Browser for SQLite.
Выполним процедуру зачистки по шагам:
1Cv8Log. В клиент-серверном варианте путь к нему выглядит следующим образом: C:\Program Files\1cv8\srvinfo\reg_1541\<Идентификатор_Базы>\1Cv8Log\.1C:Enterprise 8.3 Server Agent). Если этого не сделать, файл журнала будет заблокирован процессами rphost, и мы не сможем сохранить изменения. При работе с файловой базой — просто закроем все сеансы пользователей и конфигуратор.1Cv8.lgd в безопасное место. Это критически важно на случай повреждения файла базы данных!1Cv8.lgd.
SELECT code, name FROM Users WHERE name LIKE '%Иванов%';
Допустим, в результате выполнения запроса мы выяснили, что пользователь "Иванов" имеет числовой код (code) равный 15.
EventLog. Выполним следующий SQL-запрос:
DELETE FROM EventLog WHERE userCode = 15;
Утилита сообщит о количестве удаленных строк. Однако на этом этапе размер файла на диске не изменится, так как SQLite лишь пометила удаленные страницы базы данных как свободные.
VACUUM;
Обратите внимание: выполнение команды VACUUM на больших базах (более 10–20 ГБ) может занять длительное время (вплоть до нескольких часов) и потребует свободного дискового пространства на сервере, равного текущему размеру файла журнала регистрации, так как SQLite создает временный файл в процессе перестроения структуры.
---
Для современных систем, использующих классический текстовый журнал регистрации (разделенный по дням/неделям), штатных инструментов выборочного удаления в 1С нет. Попытка запустить метод ОчиститьЖурналРегистрации() приведет к системной ошибке. Однако администраторы могут очистить такие логи на уровне файловой системы.
Каждая запись в файле формата .lgp представляет собой структурированный текст в формате сериализации 1С, заключенный в фигурные скобки. Мы можем распарсить эти файлы скриптом (например, на PowerShell или Python), вырезать записи с UUID удаляемого пользователя и перезаписать файлы.
Разберем по шагам логику и правила этой процедуры:
1Cv8Log..lgp можно открыть обычным текстовым редактором (при небольших объемах) или обработать скриптом. Найдем файлы за интересующий нас период. Внутри файлов записи имеют подобную структуру:
{20231027120000,N,
{0,0},1,1,2,1,I,"",0,
{"U"},"ИмяПользователя",1,2,3,4,5
}
Скрипт должен в потоковом режиме читать файлы .lgp, определять границы блоков {...} и исключать те блоки, в которых встречается идентификатор или имя очищаемого пользователя.
.lgp на диске обязательно нужно удалить все файлы индексов с расширением .lgx, которые находятся в той же папке 1Cv8Log.Дело в том, что файлы .lgx содержат строго структурированные бинарные индексы для быстрого поиска по файлам данных. Если мы изменим текстовые файлы .lgp вручную, но оставим старые индексы .lgx, возникнет рассинхронизация данных. При попытке открыть журнал регистрации в 1С система либо выдаст критическую ошибку, либо процессы rphost аварийно завершатся.
После удаления файлов .lgx и последующего запуска службы сервера 1С платформа автоматически перестроит индексы заново на основании наших измененных файлов .lgp при первом же обращении к журналу регистрации. Этот процесс полностью безопасен и прозрачен для пользователей, хотя само первое открытие ЖР может занять чуть больше времени.
---
Выборочное удаление данных из Журнала регистрации — это нештатная операция, требующая аккуратности и четкого понимания структуры хранения данных 1С.
Давайте зафиксируем ключевые правила, которые уберегут вашу систему от сбоев:
1Cv8Log или файлом 1Cv8.lgd скопируйте их в надежное место. Восстановить поврежденный журнал регистрации "на лету" без резервной копии практически невозможно..lgp удаление файлов индексов .lgx является обязательным условием для продолжения корректной работы системы.Выполняя эти несложные рекомендации, мы сможем эффективно управлять размером журнала регистрации и поддерживать чистоту логов в наших базах данных 1С. Для сохранения истории событий во внешнем хранилище перед сокращением логов подойдёт комплект скриптов для выгрузки журнала регистрации в ClickHouse.