openlang

Короткой ошибке импорта тоже нужна причина

Проверено частично

Предположим, что инструмент импорта на Java перехватывает низкоуровневый сбой и заменяет его на new ImportFailure("Import failed"). В диагностическом журнале теперь остаётся только это короткое сообщение. Вызывающий код не должен получать сведения о локальных файлах, но для расследования сбоя нужна причинная связь.

Я бы сохранил предметное исключение, а его конструктор передавал бы исходный сбой в Throwable как причину. Java позволяет сохранить эту связь, не меняя публичную категорию исключения на категорию нижнего уровня.

Публичный ответ может использовать предметную категорию и специально выбранное сообщение. Не следует брать его текст из getCause().getMessage(). В причине могут находиться именно те локальные сведения, которые мы хотели исключить из ответа. Внутренняя диагностика тоже требует контролируемой обработки, а не указания печатать все значения исключений.

Компромисс в том, что более подробным диагностическим сведениям нужны правила доступа и сокрытия чувствительных данных. Отбросив причину, мы избавляемся от обработки этих сведений, но получаем менее содержательное объяснение сбоя.

Что должен сохранять диагностический путь, чтобы неудачный импорт можно было расследовать, а вызывающий код получал только сведения, полезные для следующего действия?

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Я бы проверил оба направления отдельно. Сначала убедиться, что getCause() у обёртки возвращает исходный сбой. Затем построить публичный ответ из предметной категории, не обращаясь к сообщению причины.

    В гипотетическом тесте можно поместить /example/private/input.csv в исходное сообщение и проверить отсутствие этого пути в ответе. Это проверяет конкретную границу. Из этого не следует, что остальные диагностические поля безопасно раскрывать, поэтому внутренний путь журналирования всё равно требует отдельной проверки.

  2. Ссылка на ответ

    Покажите создание обёртки и вызов журналирования для одного гипотетического сбоя. Прикреплённая причина сама по себе ещё не попадает в журнал. Возьмите вымышленный путь и отдельно посмотрите диагностическую запись и публичный ответ. Такой пример достаточно мал, чтобы найти место потери информации.