Перейти к содержанию

BSL262 - Неверное использование метода "ЗаписьЖурналаРегистрации"

Кратко

Неверное использование метода "ЗаписьЖурналаРегистрации"

Идентификаторы

Поле Значение
Код правила BSL262
Совместимый псевдоним UsageWriteLogEvent
Серьёзность INFORMATION
Без конфигурации Да
BSLLS JSON, режим ON без переопределений Да
Флаг реестра implemented Да
Теги standard, badpractice

Флаг implemented отражает реестр и не подтверждает проверенное совпадение с BSLLS.

Поведение

  • Публичный идентификатор BSL262 и псевдоним UsageWriteLogEvent стабильны.
  • Правило сообщает о случаях, описанных на этой странице.
  • Подавления и проектная конфигурация применяются до публикации результата.
  • Для выполнения правила не требуется внешний анализатор или сетевой доступ.

Настройка и подавление

Код BSL### - основной стабильный идентификатор. Совместимый псевдоним принимается в select, ignore и совместимых блоковых комментариях.

[tool.onec-hbk-bsl]
select = ["BSL262"]
ignore = ["UsageWriteLogEvent"]

Все три семейства подавлений работают для текущей строки и диапазона. Если открывающий комментарий стоит после кода, он действует только на эту строку. Используйте любой один вариант:

  • noqa:
Значение = "пример";  // noqa: BSL262
  • bsl-disable (совместимый вариант):
Значение = "пример";  // bsl-disable: BSL262
  • совместимый BSLLS-вариант:
Значение = "пример";  // BSLLS:UsageWriteLogEvent-off

Если тот же открывающий комментарий стоит на отдельной строке, он начинает диапазон. Закройте его парным маркером того же семейства:

// noqa: BSL262
// код без этой диагностики
// noqa-enable: BSL262

// bsl-disable: BSL262
// код без этой диагностики
// bsl-enable: BSL262

// BSLLS:UsageWriteLogEvent-off
// код без этой диагностики
// BSLLS:UsageWriteLogEvent-on

Чтобы отключить правило до конца файла, не добавляйте закрывающий noqa-enable, bsl-enable или BSLLS:…-on.

Открывающий и закрывающий маркеры должны принадлежать одному семейству.

Описание диагностики

Важно правильно с определенной дотошностью указывать основные параметры при записи в Журнал регистрации.

Недопустимо прятать исключения. При обработке исключений обязательно нужно выполнять запись в журнал регистрации с полным представлением ошибки. Для этого нужно добавить в комментарий события результат ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())

Нельзя пропускать 2й параметр Уровень журнала регистрации. Если его не указать, по умолчанию 1С применит уровень ошибки Информация, и данная запись может потеряться в потоке записей.

Нельзя пропускать и 5й параметр - комментарий к событию записи в журнал регистрации.

Примеры

Примеры неверного кода

    ЗаписьЖурналаРегистрации("Событие");// ошибка
    ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Ошибка);// ошибка
    ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Ошибка, , );// ошибка
    ЗаписьЖурналаРегистрации("Событие", , , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

    ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Ошибка, , , );// ошибка

    Попытка
      КодСервер();
    Исключение
      ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Ошибка, , ,
        ОписаниеОшибки()); // ошибка
      ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Ошибка, , ,
        "Комментарий 1"); // ошибка
    КонецПопытки;

Правильный код

    Попытка
      КодСервер();
    Исключение

      ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
      ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка, , ,
         ТекстОшибки);
    КонецПопытки;

    Попытка
      КодСервер();
    Исключение

      ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
      ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка, , ,
         ТекстОшибки);

      ВызватьИсключение;
    КонецПопытки;
В то же время, если во внешней попытке делается запись в ЖР, то во вложенной делать её повторно уже не нужно:
Процедура ЗагрузитьДанные() Экспорт
    Попытка
        ВыполнитьЗаписьДанных();
    Исключение
        ЗаписьЖурналаРегистрации(); // <- исключение подавляется с записью в ЖР
    КонецПопытки;
КонецПроцедуры

Процедура ВыполнитьЗаписьДанных()
    НачатьТранзакцию();
    Попытка
        // ...
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение; // <- вложенная попытка, запись в ЖР не требуется
    КонецПопытки;
КонецПроцедуры

Источники