2011-05-04 112 views
1

有人知道任何方式來更方便地組織日誌記錄嗎?C#日誌問題

我想有沒有這樣的辦法,但是,嗯,這裏是一個小例子:

 // Take the longest path in the graph and convert it into the 
     // image series, note that we project every element from the 
     // sequence into the image path so that 'new Series(...)' constructor 
     // could be used. 
     var paths = EnumerateSimpleAndLoopedPaths().ToList(); 

     logger.Log(Something1); 

     if (paths.Any()) 
     { 
      // Take the longest possible path. 
      var selectedPath = paths.OrderBy(x => x.Count()).Last(); 

      logger.Log(Something2); 

      var imagesForSelectedPath = selectedPath.SelectMany(... 

顯然那些logger.LogLog或任何語句就像垃圾的主要部分代碼,也許有一個聰明的方式把他們帶到哪裏?

我知道有一些不錯的產品,像PostSharp,允許登錄到之前和之後做 - 但如果功能有什麼登錄工作的一些中間結果?

或者這只是一個分解問題,我應該把所有東西都分解,這樣我可以標記所有這些可記錄條目爲[Loggable]

任何建議,將不勝感激。 如何登錄代碼?

回答

1

如何劃分方法的內在邏輯附加私有方法做中間工作,

,或者,如果你不想與類方法太多,只能被用來結束在一個地方,...

定義一個內部類來完成工作(如果您將父類的引用傳遞給內部類的構造函數,它將自動訪問父類的私有成員)。
內部類可以有許多隻能由內部類的方法訪問的私有方法。因此,在內部類上定義一個公共/內部方法,以通過外部類的方法調用。

使用這兩種方法,您可以修飾具有AOP屬性的新方法(例如PostSharp)。

0

由於AOP框架的限制,您需要使用分解來獲得好處。無論如何,你應該這樣做。方法應該保持非常簡單,只做一件事。將條件邏輯提取到方法中,然後創建PostSharp方面。

我這樣說是因爲如果您需要在您的條件下進行日誌記錄,那麼該代碼塊足夠重要,可以使用它自己的方法。除非你只是爲了尋找原因而做這件事,在這種情況下你可以做任何事情,因爲無論如何它應該是臨時的。