2010-06-18 23 views
2

目前我有一個靜態類,我用作我的日誌記錄模塊。我已將該課程添加到我的Visual Studio解決方案中。在類中,我指定了要使用的日誌文件的名稱和位置。 這讓我做這樣的事情 - 我喜歡和想要的東西。如何在不調用明確方法的情況下爲引用程序集提供值?

Logger.Information(「Page_Load」,」controls loaded correctly」); 

我想重構代碼和移動日誌功能到單獨編譯的程序集,如果我這樣做,那麼我會需要在日誌文件名稱和位置來保存文件,也通過。

但是我不希望有我每次叫「記錄」方法時提供這些信息,這將是壞...

Logger.Informtaion(「Page_Load」,」controls loaded correctly」,」logfile.txt」,」c:\temp」); 

有什麼辦法,我可以提供這種信息,而無需在每個頁面內或通過方法調用指定它。

回答

3

當然。最簡單的方法是將一個鍵添加到web.config文件中,這個文件是您的類使用ConfigurationManager查看的。

<configuration> 
<appSettings> 
    <add key="logfile" value="c:\log.txt" /> 
</appSettings> 

<system.web> 
... 
</system.web> 
</configuration> 


string logfile = ConfigurationManager.AppSettings["logfile"] 

如果你的日誌類不只是一個或兩個配置選項,consider building a ConfigurationSection class與它一起去,這樣可以讓你創建在web.config中自己的部分更加複雜。

配置方法適用於這種類型的事情,因爲這樣可以避免將日誌文件路徑硬編碼到應用程序代碼中(例如將它傳遞給靜態初始化方法),如果需要的話,這需要重新編譯更改日誌記錄路徑。但是,創建日誌記錄類時,只需要查看一次日誌文件路徑即可。

1

當然,

創建你的靜態類的initialize方法和文件傳遞到初始化mentod。然後在應用程序啓動時調用該方法。

2
  1. 我不免要問,如果你已經使用TraceListener調查和System.Diagnostics命名空間,其內置的日誌(而不是滾動您自己)。這是相當可擴展的。

  2. 您是否考慮過讓您的記錄器非靜態?也許是單身?這是適合使用Singleton模式的經典示例。

相關問題