Где лучшее место для записи ошибки в журнал? (BLL или ExceptionConstructor) - PullRequest
0 голосов
/ 22 сентября 2011

Я хочу создать какое-то пользовательское исключение и записать его в журнал.
Каков наилучший метод в отношении правильного места для записи журнала: BLL или самого конструктора исключений?

class TaskDataValidationFailedException : Exception
{
    public TaskDataValidationFailedException(TaskValidationResult validation)
    {
        this.validation = validation;

        //SHOULD I WRITE THE LOG HERE? 
        _log.Info("Task " + task.Name + " valication failed");
    }
}

или здесь?

if (!validation.validationSucceeded)
{
     throw new TaskDataValidationFailedException(validation);

     //OR SHOULD I WRITE THE LOG HERE? 
     _log.Info("Task " + task.Name + " valication failed");
}

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Второе лучше:

  • Почему исключение должно что-то знать о журнале?Эти две вещи являются независимыми.
  • Вы можете написать для записи любого количества переменных, в первом случае вам нужно передать все из них вашему исключению.

Также вы можете рассмотретьнаписать функцию для проверки правильности, записи в журнал и выдачи исключения:

 void CheckValidation(...) {
     if (!validation.validationSucceeded) {
         _log.Info("Task " + task.Name + " valication failed");
         throw new TaskDataValidationFailedException(validation);
      }
 }
0 голосов
/ 27 сентября 2011

Ну, большинство людей регистрируют Исключение непосредственно перед тем, как его выбросить. Однако выполнение этого в конструкторе исключения имеет свои достоинства, если вы все делаете правильно; D Правильное выполнение означает, что вам нужен еще один уровень наследования. Таким образом, вы можете сделать это в централизованном конструкторе (в любом случае у вас должен быть один базовый класс Exception для «компонента» вашей системы). Исключение промежуточного уровня будет иметь ctor, который принимает сообщение и регистрирует его. Что ж, в Java промежуточное исключение может вызывать метод, который может быть перезаписан в производных классах, но это невозможно в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...