Журнал регистрации 1С: фильтрация по событию, пользователю и дате
ВыбратьЖурналРегистрации / ВыгрузитьЖурналРегистрации, и как настроить уровень детализации без потери производительности.Где живёт журнал регистрации
Платформа хранит журнал в каталоге информационной базы (для файлового варианта) или рядом с базой на сервере (для клиент-серверного). Формат зависит от версии платформы:
- До 8.3.5: каталог
1Cv8Logс файлами.lgp(записи) и.lgf(служебные). Поиск по таким файлам последовательный — система перебирает их по очереди. - 8.3.5 – 8.3.11: по умолчанию SQLite-журнал в каталоге
1Cv8FLog(основной файл1Cv8.lgd). Выборка с отбором обычно быстрее за счёт индексов, но количественных сравнений в официальных источниках нет. - С 8.3.12 и далее: по умолчанию платформа снова использует старый формат с
.lgf/.lgp. SQLite-вариант остаётся доступным, но включается явно в параметрах информационной базы.
Тип хранилища и факт ведения журнала задаются в монопольном режиме через Конфигуратор → Администрирование → Параметры информационной базы → Журнал регистрации либо программно методом УстановитьИспользованиеЖурналаРегистрации().
Просмотр через интерфейс
В режиме Предприятия журнал доступен через меню Все функции → Стандартные → Журнал регистрации. По кнопке «Установить отбор» открывается окно фильтра. Без отбора форма открывается «как есть» и подгружает записи по мере прокрутки, что на большом журнале медленно.
Основные параметры отбора
| Параметр | Что фильтрует |
|---|---|
| Период (Дата начала / Дата окончания) | Самый важный параметр — сужает диапазон сканирования. Без него платформа читает журнал с начала ведения. |
| Уровень | Информация, Предупреждение, Ошибка, Примечание. |
| Пользователи | Множественный выбор с режимом «В списке» или «Не в списке». |
| События | Стандартные категории: _$Session$_.Start, _$Session$_.Authentication, _$Data$_.Update, _$Access$_.AccessDenied и другие. |
| Метаданные | Конкретный объект конфигурации, например Документ.РеализацияТоваровУслуг. |
Программная выборка
Для автоматизированной обработки журнала платформа предоставляет два глобальных метода — оба заполняют переданную ТаблицуЗначений, различаются только параметрами:
ВыгрузитьЖурналРегистрации(<Отбор>, <Таблица>, <КоличествоЗаписей>)— простой вариант: отбор + ограничение количества.ВыбратьЖурналРегистрации(<Отбор>, <Таблица>, <НачальнаяДата>, <КонечнаяДата>, <КоличествоЗаписей>)— то же самое плюс отдельные параметры для границ периода. Полезно, когда даты приходят отдельно от остального отбора.
Параметр КоличествоЗаписей ограничивает выборку по числу строк — критично для регулярных задач: лучше получить последние 1000 ошибок, чем пытаться прочитать миллион.
// Найти все события уровня Ошибка за последний час
// по документу РеализацияТоваровУслуг (пример из типовых
// конфигураций 1С:УТ 11 / 1С:Бухгалтерия / 1С:ERP).
Отбор = Новый Структура;
Отбор.Вставить("ДатаНачала", ТекущаяДатаСеанса() - 3600);
Отбор.Вставить("ДатаОкончания", ТекущаяДатаСеанса());
Отбор.Вставить("Уровень", УровеньЖурналаРегистрации.Ошибка);
Отбор.Вставить("Метаданные", Метаданные.Документы.РеализацияТоваровУслуг);
Записи = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(Отбор, Записи, 1000);
Для Каждого Запись Из Записи Цикл
Сообщить(
Формат(Запись.Дата, "ДЛФ=DT") + " | "
+ Запись.ИмяПользователя + " | "
+ Запись.Комментарий
);
КонецЦикла;
Важно: полеДатаНачалав отборе — нижняя граница включительно. Если опустить его и не задатьКоличествоЗаписей, платформа просканирует журнал с момента ввода базы в эксплуатацию. На сервере с активной базой за пару лет это может занять минуты и упереться в память.
Доступные поля записи
Каждая запись журнала — это структура со стабильным набором полей: Дата, ИмяПриложения, Компьютер, Пользователь, ИмяПользователя, Уровень, Событие, Метаданные, Комментарий, Данные, ПредставлениеДанных, СтатусТранзакции, Сеанс. Поле Данные для событий _$Data$_.Update обычно содержит ссылку на изменённый объект — удобно для аудита, — но не во всех сценариях: для отдельных типов изменений или табличных частей оно может остаться пустым.
Настройка уровня детализации
В Конфигураторе в той же форме «Параметры информационной базы → Журнал регистрации» можно отметить, какие уровни вообще писать. В типовых конфигурациях обычно включены все четыре, но конкретный набор зависит от настроек базы и истории её администрирования. В продакшене с высокой нагрузкой иногда отключают «Информация» и «Примечание», чтобы снизить I/O на запись.
Срок хранения и автоочистка
Чтобы журнал не разрастался бесконечно, задаётся срок разделения — период, через который старые записи отделяются в отдельный сегмент. Параметр — в той же форме либо программно через УстановитьСрокСохраненияЖурналаРегистрации() с одним из значений перечисления СрокСохраненияЖурналаРегистрации (День, Неделя, Месяц, Квартал, Год, БезОграничений). Само удаление старых сегментов автоматическим не является: в файловом варианте «отрезанные» файлы остаются на диске до ручной очистки, а в клиент-серверном — попадают в зону ответственности фоновых регламентных операций сервера, и фактическое освобождение места может задержаться.
Практическое руководство
- В отборе всегда указывайте
ДатаНачала— иначе платформа просканирует архив с момента ведения базы. - Всегда задавайте
КоличествоЗаписейвВыгрузитьЖурналРегистрации/ВыбратьЖурналРегистрации— иначе при широком отборе можно вычитать слишком много строк и упереться в память. - Настройте регламентное задание, которое раз в сутки выбирает все события уровня Ошибка за прошедшие 24 часа и отправляет администратору на e-mail.
- При расследовании инцидента сначала фильтруйте по событию
_$Data$_.Updateи_$Access$_.AccessDenied, потом сужайте поМетаданныеи пользователю. - Если база на 8.3.x ниже 8.3.5 — обновляйтесь до актуальной поддерживаемой ветки. Решение, использовать ли SQLite-журнал, принимайте отдельно: на 8.3.12+ это уже не значение по умолчанию.
Типичные ошибки при работе с журналом
- «Не вижу события начала сеанса» — в Конфигураторе уровень «Информация» отключён в настройках регистрации, либо у пользователя нет права просмотра журнала.
ВыбратьЖурналРегистрациивозвращает пустую выборку — самая частая причина:ДатаНачалаустановлена позже последней доступной записи, или указана несуществующая комбинация Метаданные + Уровень.- Журнал «съел» диск — настройте срок разделения через
УстановитьСрокСохраненияЖурналаРегистрации()и не забывайте вручную (или регламентным заданием) удалять «отрезанные» сегменты: само переключение срока разделения старые файлы с диска не убирает. - Поле
Данныепустое — оно заполняется только для событий, привязанных к конкретному объекту (изменение, удаление); для общих событий вроде «Сеанс.Начало» оно пустое по дизайну.
Перейти в каталог решений →