Разработка и Конфигурация · 10 мин
Как писать в журнал регистрации 1С
Как программно записывать события в журнал регистрации 1С: метод ЗаписьЖурналаРегистрации, уровни событий, отладка, типичные ошибки и рекомендации для разработчиков.
Журнал регистрации — встроенный механизм платформы 1С:Предприятие, который фиксирует действия пользователей, системные события и сообщения, записанные из программного кода. Для разработчика это основной инструмент диагностики: в отличие от модальных сообщений, записи журнала сохраняются на сервере, доступны администратору и не прерывают работу пользователей.
Программная запись в журнал регистрации выполняется одним методом — ЗаписьЖурналаРегистрации(), доступным в глобальном контексте на сервере и на толстом клиенте. Метод принимает имя события, уровень важности, объект метаданных, данные и текст комментария. Правильно оформленные записи позволяют быстро находить ошибки обменов, фоновых заданий и интеграций без подключения отладчика.
Ниже разобран синтаксис метода, выбор уровня события, типовые сценарии использования, ограничения платформы и ошибки, которые чаще всего встречаются на практике.
Синтаксис метода ЗаписьЖурналаРегистрации
Метод имеет пять параметров, из которых обязателен только первый — имя события. Полная сигнатура выглядит так:
ЗаписьЖурналаРегистрации(
"Обмен с сайтом.Выгрузка заказов",
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Документы.ЗаказПокупателя,
СсылкаНаЗаказ,
"Не удалось выгрузить заказ: " + ОписаниеОшибки());
Первый параметр — строка с именем события. Принято строить её иерархически через точку: «Обмен с сайтом.Выгрузка заказов». Такие имена удобно фильтровать в просмотре журнала. Второй параметр — уровень важности из системного перечисления УровеньЖурналаРегистрации. Третий — объект метаданных, к которому относится запись; он попадает в колонку «Метаданные» и упрощает анализ.
Четвёртый параметр — произвольные данные, обычно ссылка на объект. В окне просмотра журнала по такой записи можно перейти к самому объекту. Пятый — текстовый комментарий произвольной длины. Есть также шестой необязательный параметр «РежимТранзакции», который управляет поведением записи при откате транзакции.
Выбор уровня события
Платформа предоставляет четыре уровня важности: Ошибка, Предупреждение, Информация и Примечание. От выбора уровня зависит, как запись выглядит в журнале и насколько легко её отфильтровать при разборе инцидента.
Уровень Ошибка применяйте, когда операция не выполнена и требует вмешательства: не прошёл обмен, не сформировался проводки, недоступен внешний сервис. Предупреждение — для ситуаций, когда операция завершилась, но с отклонениями: часть данных пропущена, использовано значение по умолчанию. Информация подходит для фиксации штатных этапов: начало и конец загрузки, количество обработанных объектов. Примечание используют редко — для малозначимых технических деталей.
Не записывайте всё подряд с уровнем «Информация»: в рабочей базе журнал растёт быстро, и поиск реальных ошибок среди тысяч информационных записей превращается в проблему. Разумный баланс — ошибки и предупреждения всегда, информационные записи только о ключевых точках процесса.
Типовые сценарии использования
Логирование ошибок в обработчиках исключений
Самый частый сценарий — запись подробностей исключения в блоке Попытка...Исключение. Используйте функцию ОписаниеОшибки() или, в новых версиях платформы, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) для полного текста со стеком вызовов.
Попытка
ВыполнитьОбмен();
Исключение
ЗаписьЖурналаРегистрации("Обмен.Основной",
УровеньЖурналаРегистрации.Ошибка, , ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Фоновые и регламентные задания
Регламентные задания выполняются без интерфейса, и журнал регистрации — единственный способ понять, что происходило. Записывайте старт задания, его результат и длительность. Если задание завершилось с исключением, платформа сама пишет запись об ошибке, но она содержит минимум деталей — собственная запись с контекстом (параметры запуска, объём данных) сильно упрощает диагностику.
Интеграции и обмены данными
При обменах фиксируйте три точки: начало сеанса обмена, итог (сколько объектов загружено, сколько с ошибками) и каждую ошибку по конкретному объекту со ссылкой в параметре «Данные». Тогда администратор из журнала сможет открыть проблемный документ одним кликом.
- 1Определите место в коде, где нужна фиксация: обработчик исключения, начало/конец операции, точка принятия решения
- 2Сформулируйте имя события в формате «Подсистема.Действие», например «ЗагрузкаКурсов.ПолучениеОтвета»
- 3Выберите уровень: Ошибка для сбоев, Предупреждение для отклонений, Информация для штатных этапов
- 4Вызовите ЗаписьЖурналаРегистрации() с метаданными, ссылкой на объект и информативным комментарием
- 5Выполните код и проверьте запись через «Администрирование — Журнал регистрации» с отбором по вашему событию
Где смотреть записи и как проверить результат
В режиме предприятия журнал открывается через раздел «Администрирование — Обслуживание — Журнал регистрации» (в типовых конфигурациях) или через «Все функции». В конфигураторе — меню «Администрирование — Журнал регистрации». Для проверки своих записей установите отбор по событию: введите начало имени, например «Обмен с сайтом», и журнал покажет все записи вашей подсистемы.
Проверяйте не только факт появления записи, но и заполнение колонок: «Метаданные», «Данные», «Комментарий». Пустые колонки означают, что соответствующие параметры не переданы, и ценность записи для расследования снижается.
Как проверить результат
Видна при отборе по событию с нужным уровнем
Записи нет — код не выполнился или вызван на клиенте, где метод недоступен
Содержит ссылку, по которой открывается объект
Пусто — параметр «Данные» не передан
Содержит причину и контекст ошибки
Только «Ошибка» без деталей — разбор инцидента невозможен
Ограничения и нюансы платформы
Метод ЗаписьЖурналаРегистрации недоступен в контексте тонкого и веб-клиента. Если код общего модуля может выполняться на клиенте, выносите запись в серверную процедуру. В мобильной платформе и внешних соединениях также есть свои ограничения — проверяйте контекст исполнения.
Второй нюанс — транзакции. По умолчанию запись журнала выполняется в той же транзакции, и при её откате запись теряется. Для ошибок это критично: вы фиксируете исключение, откатываете транзакцию — и записи нет. Решение — шестой параметр метода, РежимТранзакцииЗаписиЖурналаРегистрации.Независимая, который записывает событие вне текущей транзакции.
Третий момент — производительность. Запись в журнал — это обращение к хранилищу. В циклах на десятки тысяч итераций не пишите запись на каждой строке: агрегируйте итоги и фиксируйте сводку, а детальные ошибки — только по факту их возникновения.
Типичные ошибки разработчиков
Наиболее распространённая ошибка — запись только текста «Ошибка» без деталей. Такая запись бесполезна: через неделю никто не вспомнит, что именно произошло. Всегда включайте описание исключения, имя процедуры и ключевые параметры вызова.
Вторая ошибка — использование Сообщить() вместо записи в журнал в серверном коде. Сообщения в фоновом задании никто не увидит, они теряются. Третья — отсутствие имени события с пространством имён: записи «Ошибка» от десятка подсистем перемешиваются, и фильтрация становится невозможной.
Альтернативы и дополнительные инструменты
Журнал регистрации не всегда оптимален. Для длительного хранения истории обменов с деталями по объектам удобнее собственный регистр сведений «Лог обмена» — его можно показать пользователям в интерфейсе и строить по нему отчёты, чего с журналом регистрации делать нельзя. Для расследования производительности используйте технологический журнал платформы, а для трассировки запросов — замеры через отладчик или консоль кода.
Сравнение вариантов логирования
Штатно, без доработок, надёжно. Ограничение: нет отчётов, просмотр только администратором
Гибкие отборы, доступ пользователям, отчёты. Ограничение: нужна разработка и контроль объёма данных
Детальная трассировка платформы, запросы, блокировки. Ограничение: сложная настройка, большие объёмы, не для бизнес-событий
Практичный подход — комбинировать: критичные ошибки и события писать в журнал регистрации, а детальную историю интеграций, нужную пользователям, — в специализированный регистр.
Что важно запомнить
Запись выполняется методом ЗаписьЖурналаРегистрации на сервере. Давайте событиям иерархические имена, выбирайте уровень по важности, передавайте ссылку на объект и подробный комментарий. Для ошибок внутри транзакций используйте независимый режим записи и никогда не логируйте пароли и токены.
Частые вопросы
Можно ли писать в журнал регистрации с клиента?
Нет, на тонком и веб-клиенте метод недоступен. Оборачивайте вызов в серверную процедуру общего модуля с флагом «Сервер» и вызывайте её из клиентского кода.
Почему моя запись не появилась в журнале?
Чаще всего запись выполнялась внутри транзакции, которая была отменена. Используйте шестой параметр метода — независимый режим записи. Также проверьте, что код вообще выполнился и не отсечён более ранним исключением.
Как записать полный текст ошибки со стеком вызовов?
В свежих версиях платформы используйте ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()). В старых — функцию ОписаниеОшибки(), но она даёт меньше деталей.
Влияют ли записи на производительность базы?
Единичные записи — практически нет. Заметная нагрузка возникает при массовой записи в циклах. Агрегируйте статистику и пишите сводные записи вместо тысяч детальных.
Можно ли автоматически оповещать об ошибках из журнала?
Штатных подписок на новые записи журнала нет. Практикуют два подхода: отправка письма или сообщения сразу в месте записи ошибки, либо периодическое чтение журнала программно через метод ВыгрузитьЖурналРегистрации с последующим анализом.
Как долго хранятся записи журнала?
Срок зависит от настроек: в файловой базе журнал — файл, который можно разделять по периодам; в клиент-серверном варианте хранение регулируется настройками сокращения. Администратор может настроить автоматическое удаление старых записей, поэтому для долгосрочной истории используйте собственные регистры.