2012-06-30 161 views
1

我正在開發一個核心dll,我有一個類庫。我想使用log4net來啓用異常日誌記錄。我在類庫中有一個app.config文件,我已經給出了log4net的設置。但是當我測試類庫時,log4net不創建日誌,直到我在調用項目中添加app.config,儘管事實如此我在類libary的assemblyinfo.cs中添加了[assembly:log4net.Config.XmlConfigurator(Watch = true)],我使用log4net.ILog logger = log4net.LogManager.GetLogger(typeof(ErrorHandler)),其中ErrorHandler是名稱我的類庫的類的地方log4net的調用函數處理。什麼是錯誤的任何想法?log4net配置設置

其次,我想達到的是我的dll的用戶只會通過他們想要創建日誌的位置,以及他們是否想在事件查看器中創建日誌或從其app.config中記錄日誌文件?他們不會處理任何其他的log4net設置。

第一個問題和第二個問題的任何建議或代碼片段?

回答

1

只有「main」app.config對於.Net應用程序才處於活動狀態。你的庫配置文件簡單地被忽略。要麼將您的設置傳輸到主配置文件,要麼將外部配置文件用於log4net。您可以配置它然後例如像這樣(假設你叫它log4net.config):

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

請注意,配置文件的結構是一個有點不同:

<?xml version="1.0" encoding="utf-8" ?> 
<log4net> 
    <appender name="YourAppender" type="..." > 
     .... 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="YourAppender" /> 
    </root> 
</log4net> 

至於你的第二個問題:我不確定這有多靈活。它只是從文件appender切換到事件日誌appender?根據您的答案,您可能會考慮準備兩個配置文件(例如file.log4net和eventlog.log4net)並根據需要讀取配置(在這種情況下,您不能使用該屬性:直接調用Configure()方法),或者如果您的要求是更復雜的,你甚至可能最終配置log4net programatically