Журнал регистрации 1С программно: запись, выгрузка и чтение
Для записи используйте ЗаписьЖурналаРегистрации(), для отбора существующих событий —
ВыгрузитьЖурналРегистрации() с периодом и фильтром типа Структура.
Выгрузка создаётся в XML-файле, который затем можно прочитать средствами XML или загрузить в таблицу значений.
Ограничивайте период, события и уровень важности: выгрузка всего журнала создаёт лишнюю нагрузку. В представление данных не помещайте пароли, токены, персональные данные и полный текст запросов с секретами.
Запись в журнал регистрации 1С 8.3 программно
Процедура ЗаписьЖурналаРегистрации() добавляет прикладное событие. Имя события задавайте
в формате Подсистема.Действие: так записи проще отличить от платформенных и отобрать по префиксу.
ДанныеСобытия = Новый Структура;
ДанныеСобытия.Вставить("УзелОбмена", "ГлавныйУзел");
ДанныеСобытия.Вставить("КоличествоОбъектов", 125);
ЗаписьЖурналаРегистрации(
"ОбменДанными.ЗагрузкаЗавершена",
УровеньЖурналаРегистрации.Информация,
Метаданные.Обработки.ОбменДанными,
ДанныеСобытия,
"Загрузка завершена успешно",
РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
Это основной ответ на запрос «1с запись в журнал регистрации программно». Передавайте объект метаданных и данные
только когда они помогают найти источник события; для общего сообщения допустимо Неопределено.
Транзакционный режим связывает запись с текущей транзакцией, независимый — фиксирует её отдельно.
События и уровни журнала регистрации
Уровень выбирают по назначению записи, а не по удобству последующего поиска:
Информация— штатное завершение значимой операции;Предупреждение— отклонение, после которого операция может продолжаться;Ошибка— операция не выполнена или результат недостоверен;Примечание— диагностическая деталь, которую обычно не используют как сигнал мониторинга.
Не записывайте каждую итерацию цикла. Для пакетной операции полезнее одно итоговое событие с количеством обработанных объектов, длительностью и безопасным идентификатором запуска.
Выгрузить журнал регистрации 1С программно
ВыгрузитьЖурналРегистрации() сохраняет записи за указанный период в XML. Ниже выгружаются ошибки
и предупреждения за последний час:
НачалоПериода = ТекущаяДата() - 3600;
КонецПериода = ТекущаяДата();
ИмяФайла = ПолучитьИмяВременногоФайла("xml");
Фильтр = Новый Структура;
Фильтр.Вставить("Уровень", Новый Массив);
Фильтр.Уровень.Добавить(УровеньЖурналаРегистрации.Ошибка);
Фильтр.Уровень.Добавить(УровеньЖурналаРегистрации.Предупреждение);
ВыгрузитьЖурналРегистрации(
ИмяФайла,
Фильтр,
НачалоПериода,
КонецПериода);
Временный файл удаляйте после обработки. Если файл должен покинуть сервер, сначала проверьте права получателя и состав полей: журнал может содержать имена пользователей, имена компьютеров и представления объектов.
Фильтр структуры для ВыгрузитьЖурналРегистрации
Второй параметр выгрузки — структура отборов. Значениями полей могут быть одиночные значения или массивы. Для диагностики собственного кода обычно достаточно события, уровня и пользователя:
Фильтр = Новый Структура;
События = Новый Массив;
События.Добавить("ОбменДанными.ОшибкаЗагрузки");
Фильтр.Вставить("Событие", События);
Уровни = Новый Массив;
Уровни.Добавить(УровеньЖурналаРегистрации.Ошибка);
Фильтр.Вставить("Уровень", Уровни);
Пользователи = Новый Массив;
Пользователи.Добавить(ИмяПользователя());
Фильтр.Вставить("Пользователь", Пользователи);
Имена полей фильтра должны соответствовать полям журнала в используемой версии платформы. Сначала проверьте узкий фильтр на тестовом интервале: неверное имя или тип значения может дать пустую выборку, хотя события существуют.
Чтение выгрузки журнала регистрации
Результат выгрузки — XML, поэтому для потоковой обработки подходит ЧтениеXML. Такой вариант не требует
загружать весь файл в память:
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ИмяФайла);
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
И Чтение.Имя = "Event" Тогда
// Здесь разбираются только поля нужной записи.
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
Точные имена XML-узлов сверяйте по файлу, который сформировала ваша версия платформы. Для аналитики удобно во время
чтения складывать только нужные поля в ТаблицаЗначений, а затем группировать их кодом или запросом к
временной таблице.
Журнал для диагностики собственного кода
Полезная запись отвечает на три вопроса: что выполнялось, над каким объектом и чем закончилось. Для связывания этапов одной операции создайте идентификатор запуска и добавляйте его в дополнительные данные каждого значимого события.
ИдентификаторЗапуска = Строка(Новый УникальныйИдентификатор());
ДополнительныеДанные = Новый Структура;
ДополнительныеДанные.Вставить("ИдентификаторЗапуска", ИдентификаторЗапуска);
ДополнительныеДанные.Вставить("Этап", "ЗагрузкаПакета");
ЗаписьЖурналаРегистрации(
"ОбменДанными.ОшибкаЗагрузки",
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Обработки.ОбменДанными,
ДополнительныеДанные,
"Пакет не обработан",
РежимТранзакцииЗаписиЖурналаРегистрации.Независимая);
Для ошибки сохраняйте безопасный бизнес-идентификатор и этап. Полный входящий пакет, строку подключения или заголовок авторизации записывать нельзя: доступ к журналу часто шире, чем доступ к исходной системе.
Производительность и безопасность
- Сужайте период. Для оперативной проверки начинайте с 15–60 минут, а не с полной истории.
- Фильтруйте до выгрузки. Отбор после создания огромного XML тратит диск, память и время сервера.
- Не логируйте в цикле. Соберите счётчики и запишите итог либо ограниченное число ошибок.
- Контролируйте размер текста. Представление должно объяснять проблему, но не дублировать payload.
- Не пишите секреты. Маскируйте токены, пароли, cookies, персональные данные и параметры подключения.
- Удаляйте временные файлы. Делайте это после успешного чтения и после обработанной ошибки.
Частые ошибки при программной работе с журналом
- Слишком широкий период. Выгрузка за месяцы может занять диск и заметно нагрузить сервер.
- Неверное поле структуры. Опечатка или неподходящий тип значения приводит к пустому результату.
- Все события имеют уровень «Ошибка». Мониторинг теряет смысл, потому что штатные случаи создают шум.
- Независимая запись для каждого шага. Журнал быстро растёт, а основная операция замедляется.
- Секреты в представлении данных. Токен или пароль остаётся в журнале и резервных копиях.
- Ожидание записи после отката. В транзакционном режиме событие может откатиться вместе с транзакцией.
- Жёсткая привязка к XML-узлам. Формат нужно проверять на целевой версии платформы.
Частые вопросы о журнале регистрации 1С
Как выполнить запись в журнал регистрации 1С 8.3 программно?
Вызовите ЗаписьЖурналаРегистрации(), передав имя события, уровень, объект метаданных,
дополнительные данные, представление и режим транзакции.
Как выгрузить только ошибки за последний час?
Передайте в ВыгрузитьЖурналРегистрации() начало и конец периода, а в структуру фильтра добавьте
уровень Ошибка. При необходимости добавьте событие и пользователя.
Можно ли записывать пароль или токен для последующей диагностики?
Нет. Журнал и его резервные копии могут быть доступны администраторам и сервисным процессам. Записывайте только маскированное значение или безопасный идентификатор, по которому секрет можно найти в защищённой системе.
ИИ Консоль кода 1С
Лайт
Для ознакомления с возможностями
- Полный набор инструментов без урезаний
- Без ввода карты
Старт
Для индивидуального использования
- До 5 конфигураций
- Встроенный агент запросов 1С
-
≈ 100 задач Подробнее про лимиты
- Техническая поддержка
Продвинутый
Популярный выборДля интенсивного использования или команд
- До 15 конфигураций
- Встроенный агент запросов 1С
-
≈ 300 задач Подробнее про лимиты
-
Свои подписки Codex, Claude и любые OpenAI-совместимые
-
Внешние обработки без Конфигуратора
- Приоритетная техническая поддержка