Записывает событие в журнал регистрации. Предназначен для записи дополнительных событий, которые не записываются системой. Средствами встроенного языка не могут записываться системные события, записываемые при записи объектов, удалении и т.д.
Синтаксис
ЗаписьЖурналаРегистрации(<ИмяСобытия>, <Уровень>, <ОбъектМетаданных>, <Данные>, <Комментарий>, <РежимТранзакции>)Примеры платформы
ЗаписьЖурналаРегистрации("ИнформационнаяБаза.ОбновлениеИБ",
УровеньЖурналаРегистрации.Информация, , ,
"Выполнено " + СтрСообщения);Полное описание, параметры и ограничения
Глобальный контекст.ЗаписьЖурналаРегистрации (Global context.WriteLogEvent)
Глобальный контекст (Global context)
ЗаписьЖурналаРегистрации (WriteLogEvent)
Доступен, начиная с версии 8.0.
Синтаксис:
ЗаписьЖурналаРегистрации(<ИмяСобытия>, <Уровень>, <ОбъектМетаданных>, <Данные>, <Комментарий>, <РежимТранзакции>)
Параметры:
<ИмяСобытия> (обязательный)
Тип: Строка.
Событие указывается строкой. Может содержать точки для обозначения иерархии событий.
Запрещена запись событий использующих сочетания символов "_$" и "$_", зарезервированные для системных событий. Например: _$МоеСобытие$_ или _$МояГруппаСобытий$_.МоеСобытие.
<Уровень> (необязательный)
Тип: УровеньЖурналаРегистрации.
Уровень важности события.
Значение по умолчанию: Примечание.
<ОбъектМетаданных> (необязательный)
Тип: ОбъектМетаданных: ОпределяемыйТип, ОбъектМетаданных: Куб, ОбъектМетаданных: ТаблицаИзмерения, ОбъектМетаданных: ВнешнийИсточникДанных, ОбъектМетаданных: Поле, ОбъектМетаданных: Таблица, ОбъектМетаданных: HTTPСервис, ОбъектМетаданных: Функция, ОбъектМетаданных: ШаблонURLHTTPСервиса, ОбъектМетаданных: Бот, ОбъектМетаданных: WebSocketКлиент, ОбъектМетаданных: ПланВидовРасчета, ОбъектМетаданных: ПланСчетов, ОбъектМетаданных: БизнесПроцесс, ОбъектМетаданных: Документ, ОбъектМетаданных: ЖурналДокументов, ОбъектМетаданных: Задача, ОбъектМетаданных: ПланВидовХарактеристик, ОбъектМетаданных: ПланОбмена, ОбъектМетаданных: РегистрБухгалтерии, ОбъектМетаданных: РегистрНакопления, ОбъектМетаданных: РегистрРасчета, ОбъектМетаданных: РегистрСведений, ОбъектМетаданных: Справочник, ОбъектМетаданных: ФункциональнаяОпция, ОбъектМетаданных: ПараметрФункциональныхОпций, ОбъектМетаданных: Команда, ОбъектМетаданных: ГруппаКоманд, ОбъектМетаданных: ХранилищеНастроек, ОбъектМетаданных: ОбщаяКоманда, ОбъектМетаданных: ЦветПалитры, ОбъектМетаданных: СервисИнтеграции, ОбъектМетаданных: WebСервис, ОбъектМетаданных: WSСсылка, ОбъектМетаданных: Интерфейс, ОбъектМетаданных: Константа, ОбъектМетаданных: КритерийОтбора, ОбъектМетаданных: Нумератор, ОбъектМетаданных: Обработка, ОбъектМетаданных: ОбщаяКартинка, ОбъектМетаданных: Макет, ОбъектМетаданных: ОбщийМодуль, ОбъектМетаданных: Форма, ОбъектМетаданных: Стиль, ОбъектМетаданных: Язык, ОбъектМетаданных: Отчет, ОбъектМетаданных: ПакетXDTO, ОбъектМетаданных: ПараметрСеанса, ОбъектМетаданных: Перечисление, ОбъектМетаданных: ПодпискаНаСобытие, ОбъектМетаданных: Подсистема, ОбъектМетаданных: Последовательность, ОбъектМетаданных: РегламентноеЗадание, ОбъектМетаданных: Роль, ОбъектМетаданных: ЭлементСтиля, ОбъектМетаданных: Графа, ОбъектМетаданных: Измерение, ОбъектМетаданных: ЗначениеПеречисления, ОбъектМетаданных: ОперацияWebСервиса, ОбъектМетаданных: Перерасчет, ОбъектМетаданных: ПараметрWebСервиса, ОбъектМетаданных: ПризнакУчетаПланаСчетов, ОбъектМетаданных: ПризнакУчетаСубконтоПланаСчетов, ОбъектМетаданных: Реквизит, ОбъектМетаданных: ТабличнаяЧасть, ОбъектМетаданных: Ресурс, ОбъектМетаданных: РеквизитАдресации, ОбъектМетаданных: КаналСервисаИнтеграции, ОбъектМетаданных: ОбщийРеквизит.
Объект метаданных, к которому относится событие.
<Данные> (необязательный)
Тип: Любая ссылка, Число, Строка, Дата, Булево, Неопределено, Null, Тип.
Данные, с которыми связано событие.
Рекомендуется указывать ссылки на объекты данных (элементы справочников, документы, к которым относится событие).
<Комментарий> (необязательный)
Тип: Строка.
Произвольная строка комментария к событию.
Значение по умолчанию: Пустая строка.
<РежимТранзакции> (необязательный)
Тип: РежимТранзакцииЗаписиЖурналаРегистрации.
Указывает отношение записи к текущей транзакции.
Значение по умолчанию: Независимая.
Описание:
Записывает событие в журнал регистрации.
Предназначен для записи дополнительных событий, которые не записываются системой.
Средствами встроенного языка не могут записываться системные события, записываемые при записи объектов, удалении и т.д.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Пример:
ЗаписьЖурналаРегистрации("ИнформационнаяБаза.ОбновлениеИБ",
УровеньЖурналаРегистрации.Информация, , ,
"Выполнено " + СтрСообщения);
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Проверить, что независимая запись журнала не исчезает при отмене транзакции
Отмена прикладной транзакции не обязана удалять диагностику. В собственной базе задаём Независимая явно и проверяем одно событие после отмены, не записывая прикладные объекты.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ отдельную пустую файловую базу на 8.5.1.1343. Корневое имя конфигурации УчебныйЖурнал85. Рабочий журнал УТ/КА2/УНФ/БП не используйте.
Запускайте серверный ВыполнитьПример() Экспорт собственного учебного модуля с правом просмотра журнала. Для уроков записи в настройках журнала собственной базы должен быть разрешён уровень Информация.
Фрагмент вставьте в тело процедуры; каждый урок запускайте отдельно. Код НЕ включает регистрацию автоматически и НЕ меняет настройки журнала.
Уроки с ЗаписьЖурналаРегистрации оставляют собственные события в журнале учебной базы. Это реальная диагностическая запись, не запись прикладного документа. Очистка/сокращение журнала не выполняются.
В тексты/Данные не добавляйте токены, пароли, персональные сведения или полные ответы сервисов. Выгрузка ограничена собственным случайным именем события и безопасными колонками, XML-файл не создаётся.
Уровни = ПолучитьИспользованиеЖурналаРегистрации();
Если Уровни.Найти(УровеньЖурналаРегистрации.Информация) = Неопределено Тогда
ВызватьИсключение "В собственной учебной базе уровень Информация не разрешён. Настройки кодом не менялись";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Запускайте урок без внешней активной транзакции";
КонецЕсли;
ИмяСобытия = "УчебныйЖурнал85.Отмена." + Строка(Новый УникальныйИдентификатор);
НачатьТранзакцию();
Попытка
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , ,
"Независимая учебная диагностика до отмены", РежимТранзакцииЗаписиЖурналаРегистрации.Независимая);
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда ОтменитьТранзакцию(); КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());
События = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(События, Новый Структура("Событие", ИмяСобытия), "Событие,Комментарий", , 1);
Сообщить(События.Количество() = 1);
Если События.Количество() = 1 Тогда
Сообщить(События[0].Комментарий = "Независимая учебная диагностика до отмены");
КонецЕсли;Разбор по шагам
Проверяем отсутствие внешней транзакции, чтобы не отменить чужую работу.
Начинаем собственную транзакцию, но не записываем документы/регистры.
У записи журнала явно задан режим Независимая: её сохранение не связано с отменой прикладной транзакции.
Отменяем собственную транзакцию на обычном пути и при исключении; фиксации нет.
После отмены выгружаем максимум одно событие только своего UUID и проверяем комментарий.
Как проверить результат
Три логические проверки дают Истина при разрешённом уровне и доступном журнале.
Транзакция завершена, независимая диагностическая запись осталась в учебном журнале. Прикладные объекты не создавались.
Ожидаемый результат
На отдельном событии разобрана граница между отменой транзакции и жизнью независимой диагностики.
На что обратить внимание
Отмена транзакции не является очисткой журнала и не откатывает внешние HTTP-вызовы/файлы.
Не переносите вывод на другие режимы записи журнала без отдельной проверки.
Если уровень выключен или журнал недоступен, отсутствие строки не доказывает её удаление отменой.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Различить идентификатор события и его представление для отбора
Добавляем один собственный диагностический маркер. Из допустимых значений отбора получаем только имена событий, не сведения о пользователях или компьютерах.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ отдельную пустую файловую базу на 8.5.1.1343. Корневое имя конфигурации УчебныйЖурнал85. Рабочий журнал УТ/КА2/УНФ/БП не используйте.
Запускайте серверный ВыполнитьПример() Экспорт собственного учебного модуля с правом просмотра журнала. Для уроков записи в настройках журнала собственной базы должен быть разрешён уровень Информация.
Фрагмент вставьте в тело процедуры; каждый урок запускайте отдельно. Код НЕ включает регистрацию автоматически и НЕ меняет настройки журнала.
Уроки с ЗаписьЖурналаРегистрации оставляют собственные события в журнале учебной базы. Это реальная диагностическая запись, не запись прикладного документа. Очистка/сокращение журнала не выполняются.
В тексты/Данные не добавляйте токены, пароли, персональные сведения или полные ответы сервисов. Выгрузка ограничена собственным случайным именем события и безопасными колонками, XML-файл не создаётся.
Уровни = ПолучитьИспользованиеЖурналаРегистрации();
Если Уровни.Найти(УровеньЖурналаРегистрации.Информация) = Неопределено Тогда
ВызватьИсключение "В собственной учебной базе уровень Информация не разрешён. Настройки кодом не менялись";
КонецЕсли;
ИмяСобытия = "УчебныйЖурнал85.Маркер." + Строка(Новый УникальныйИдентификатор);
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , , "Собственный маркер без секретов");
Представление = ПредставлениеСобытияЖурналаРегистрации(ИмяСобытия);
Сообщить("Идентификатор: " + ИмяСобытия);
Сообщить("Представление: " + Представление);
Сообщить("Использование события: " + Строка(ПолучитьИспользованиеСобытияЖурналаРегистрации(ИмяСобытия)));
ЗначенияОтбора = ПолучитьЗначенияОтбораЖурналаРегистрации("Событие");
СписокСобытий = Неопределено;
Если Не ЗначенияОтбора.Свойство("Событие", СписокСобытий) Тогда
ВызватьИсключение "В результате отсутствует запрошенная колонка Событие";
КонецЕсли;
НайденМаркер = Ложь;
Для Каждого Пара Из СписокСобытий Цикл
Если Пара.Ключ = ИмяСобытия Тогда
НайденМаркер = Истина;
Сообщить("Представление из отбора: " + Строка(Пара.Значение));
КонецЕсли;
КонецЦикла;
Сообщить(НайденМаркер);Разбор по шагам
Записываем случайное собственное имя события без системного префикса и без секретов.
ПредставлениеСобытияЖурналаРегистрации используется для отображения; точный идентификатор сохраняем отдельно для отбора.
ПолучитьИспользованиеСобытияЖурналаРегистрации читает режим, не включает событие.
ПолучитьЗначенияОтбора возвращает Структура. Её Событие содержит Соответствие идентификатор → представление.
Выводим только свою пару. Параметр Колонки не расширяем до Пользователь/Компьютер/портов/разделителей.
Как проверить результат
НайденМаркер даёт Истина при разрешённой регистрации и доступном журнале.
В сообщениях показан только новый собственный UUID события, его представление и режим; чужие события из цикла не печатаются.
Ожидаемый результат
Показан контракт вложенного результата значений отбора и разделение кода/подписи события.
На что обратить внимание
Идентификатор и локализованное представление не всегда совпадают; для отбора используйте идентификатор.
Режим события и разрешённый уровень — разные настройки; существование имени не гарантирует регистрацию любого уровня.
Собственный маркер остаётся в журнале учебной базы. Не очищайте рабочий журнал.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.