Обработка ошибок и логирование
Директивный
v8std#std498v8std#std499v8std#std790диагностикаMissingCodeTryCatchEx
Правило
Заголовок раздела «Правило»Если исключение поймано — обязательна запись в ЖурналРегистрации с контекстом и
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()). «Молчаливые» исключения и
серверные функции, которые на ошибке «тихо возвращают Ложь», запрещены. Сообщение
пользователю локализуется и не заменяет запись в ЖР.
В блоке Исключение пробрасывайте ошибку через ВызватьИсключение; без
параметра — так сохраняется исходный стек.
Перехват ставится там, где ошибку можно осмысленно обработать: на границе
сценария (обработчик команды, фоновое задание, обработчик входящего сообщения),
а не «на всякий случай» вокруг каждого вызова. Попытка без содержательной
реакции в Исключение — это не обработка ошибок, а их сокрытие.
Проглоченное исключение превращает сбой в невидимую порчу данных: инцидент всплывает позже и без следов в журнале. Запись с контекстом делает проблему диагностируемой и воспроизводимой.
Правильно
Заголовок раздела «Правильно»Ещё два частых анти-паттерна в блоке Исключение:
ОписаниеОшибки() не используйте и для логирования: в отличие от
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) оно не содержит стека вызовов
и вложенных причин.
Текст, попадающий в ЖР из внешних источников, предварительно чистите от Символ(0)
— см. NUL-байт ломает XML/XDTO и запись в ЖР.
Что писать в ЖР
Заголовок раздела «Что писать в ЖР»Запись полезна ровно настолько, насколько по ней можно найти и воспроизвести проблему без доступа к отладчику:
| Поле | Требование |
|---|---|
| Имя события | Устойчивое, с иерархией через точку: НСтр("ru='Загрузка данных.ДодоИс'") — по нему строится отбор в ЖР; не собирать имя из переменных |
| Уровень | Ошибка — сбой сценария; Предупреждение — пропуск/деградация (строка отклонена, объект пропущен); Информация — итоги штатной работы |
| Данные | Ссылка на объект-виновник — из события можно перейти к документу |
| Комментарий | Контекст воспроизведения: внешний ключ, входные параметры, и всегда ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) |
Пачки: итог, а не тишина
Заголовок раздела «Пачки: итог, а не тишина»Для массовой обработки (загрузка, перепроведение) обязателен итог в ЖР:
обработано N, отклонено M, причины отклонений — по записи уровня
Предупреждение на пропуск и одна итоговая запись. «Обработка отработала без
ошибок», потеряв треть строк молча, — худший из вариантов: инцидент всплывает
через месяц сверкой. Как это выглядит в реальном конвейере — стадия «Итог в ЖР»
в сквозном примере загрузки из ДодоИс;
частный случай отказа (закрытый период) разобран в
стандарте о дате запрета.
Когда не применять
Заголовок раздела «Когда не применять»Ожидаемые «пустые» результаты, которые не являются ошибкой (например, объект не найден и это штатная ветка логики), не требуют записи в ЖР. Правило касается именно перехвата исключений.
См. также
Заголовок раздела «См. также»- Код-стайл: корпоративные дополнения — детали по
ВызватьИсключениеиПодробноеПредставлениеОшибки.