2011-03-03 71 views
2

我開發了一個正在由另一個應用程序中的加載項體系結構使用的庫。我的庫使用log4net進行日誌記錄。如何使用System.Configuration.Configuration配置log4net

這個測試工作正常,如在app.config的位置就可以解決和log4net的使用配置:

log4net.Config.XmlConfigurator.Configure(); 

當作爲加載的加載它不可能解決應用程序配置使用這種方法。

一種選擇是使用通過加載項體系結構傳入的配置來配置log4net。可以使用的配置類似如下的結果:

string asmFile = System.Reflection.Assembly.GetExecutingAssembly().Location; 
System.Configuration.Configuration dllConfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(asmFile); 

如何能在System.Configuration.Configurationlog4net.Config.XmlConfigurator使用嗎?

我可以從配置中看到適用的ConfigurationSection,但無法看到輕鬆獲取XmlConfigurator.Configure()所需的ILoggerRepository或XmlElement的方法。

System.Configuration.ConfigurationSection configSection = configuration.GetSection("log4net"); 
+0

你不能添加您的配置文件使用您的庫項目的地圖嗎? – Carra 2011-03-03 22:53:05

+0

@卡拉,你能詳細說明一下嗎?對於這個項目,我將該庫傳遞給外部開發人員,以便使用和集成加載項體系結構項目。我無法控制它們如何使用它(除了我發佈的API),但需要爲它們提供一種方法來配置它。 – 2011-03-03 23:09:22

回答

2

這是迄今爲止我所見過的最好的,它似乎並不特別健壯。

if (configuration.HasFile) 
{ 
     System.IO.FileInfo configFileInfo = new System.IO.FileInfo(configuration.FilePath); 
     log4net.Config.XmlConfigurator.Configure(configFileInfo); 
} 

我沒有考慮使用一個XmlSerializer寫配置到一個XmlDocument,然後順便指出的XmlElement到配置,但我無法得到的配置序列化。

0

我沒有對他們 如何使用它(比我 發佈API等),但需要提供一個方法 爲他們配置它沒有控制權。

我們的log4net包裝是在一個DLL。使用此日誌記錄框架的項目只需將log4net配置塊添加到其webservices/clients的配置文件中。

此外,該方案已在啓動時調用這個:

XmlConfigurator.Configure(); 
+0

有趣,但不幸的是我無法將日誌記錄配置爲核心應用程序的一部分,因爲我的庫作爲加載項加載。我的加載項的配置(如連接字符串和應用程序設置)必須獨立於核心應用程序。 – 2011-03-05 08:47:55