1
我是log4net的全新用戶,並且我試圖維護一些使用它的遺留代碼。我注意到有兩個告訴log4net登錄到不同位置的靜態類正在相互跳動。啓用記錄到log4net中的兩個不同位置
的類各自具有靜態構造,看起來像這樣
static Logger() {
_Logger = new X.LoggingService.AppLogger(
X.UtilityServer.Configuration.ConfigInfo.LoggerConfigFile);
}
除了具有不同的配置值;這兩個靜態類都初始化相同的AppLogger
輔助類。第二類初始化是覆蓋第一個類的初始化。我想我已經跟蹤這個問題到這裏:
private ILog Log {
get {
if (!_ConfiguratorSet) {
_ConfiguratorSet = true;
XmlConfigurator.Configure(new FileInfo(_ConfigFile)); //<--- STATIC
}
return _log;
}
}
因爲我絕對沒有支持線程安全,我應該只是得到刪除if語句?每次我需要記錄一些昂貴的東西時,會撥打XmlConfigurator.Configure
?有沒有更好的辦法?該代碼使用的log4net版本1.2.10
我將如何去完成#1 - 配置log4net **一次**?這個代碼庫有許多xml文件位置存儲爲配置設置。當項目X需要登錄時,它會拉下配置文件路徑,並將它傳遞給這個助手類,該類調用XmlConfigurator.Configure並將其傳遞給實際文件(新的FileInto(_ConfigFile)。是否有一種簡單的方法可以解決這個問題重新設計了很多東西? –
在我的項目中,我使用了一種方法,其中一個VS解決方案包含一個項目,這個項目通常由其他項目與解決方案共享,該項目通常稱爲「Core」或「Commons」。我會保留一個靜態類,它提供靜態方法來配置log4net和靜態方法來獲取日誌名稱。通常一個解決方案只有一個入口點,所以我在那裏調用'Configure'方法。 VS解決方案(如Web項目,服務,Win應用程序)? – oleksii
這樣項目X可以只傳遞它需要的Looger的名字,還是更復雜的情況? – oleksii