2011-09-22 32 views
0

我想拋出一些自定義異常並將其寫入日誌。
關於寫入日誌的正確位置的最佳實踐是什麼:BLL或Exception構造函數本身?將錯誤寫入日誌的最佳位置在哪裏? (BLL或ExceptionConstructor)

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

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

or here?

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

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

回答

0

那麼,大多數人只是把它扔之前登錄異常。但是,在Exception的構造函數中執行它有其優點,如果您做得對; D 做得對就意味着您需要更多的繼承級別。所以你可以在一個集中的構造函數中完成它(無論如何,你應該爲系統的每個「組件」設置一個Exception基類)。中級異常將有一個接受消息並記錄它的ctor。那麼,在Java中,中等異常可能會調用可以在派生類中被覆蓋的方法,但這在C++中是不可能的。

1

二是更好:

  • 爲什麼要例外瞭解一下日誌?這兩件事是獨立的。
  • 您可以編寫記錄任意數量的變量,在第一種情況下,您必須將所有變量都傳遞給您的異常。你

也可以考慮寫一個函數用於檢查驗證,寫日誌,並拋出一個異常:

void CheckValidation(...) { 
    if (!validation.validationSucceeded) { 
     _log.Info("Task " + task.Name + " valication failed"); 
     throw new TaskDataValidationFailedException(validation); 
     } 
} 
相關問題