2015-02-24 71 views
0

我正在使用Log4Net v1.2.13.0和.Net 4.5。當我將我的代碼作爲控制檯應用程序運行時,它的記錄效果很好。但是,當我將其作爲服務運行時,我什麼也得不到。該服務以管理員權限登錄時運行。當我附加到進程並在調試模式下遍歷代碼時,就好像配置文件中沒有任何內容已經被讀取。當您檢查記錄器對象時,沒有任何屬性設置爲真,例如Logger.IsDebugEnabled,Logger.IsInfoEnabled等未使用Log4Net記錄的Windows服務

這是我如何配置記錄器實例,然後檢索相同的實例。

private static readonly ILog Logger = LogManager.GetLogger(typeof(ServiceHostService)); 

我將日誌記錄級別設置爲ALL。

關於可能出錯的任何想法?

+0

您是否稱爲Log4Net.Configure某處? – Alessio 2015-02-24 20:00:11

+0

確保您的服務具有對Log4net寫入的文件的寫入權限。這不僅僅是安全訪問問題。 – code5 2015-02-24 20:42:08

+0

不,我沒有在代碼的任何地方調用Log4Net.Configure。我從別人那裏繼承了這段代碼,它從來沒有調用過它,並且始終作爲控制檯應用程序運行良好,但現在我正在推廣到服務。我正在寫入數據庫表和事件日誌,但不是文件。服務已在管理員框中登錄,並以數據庫的dbo身份登錄。 – 2015-02-25 00:30:18

回答

3

如果LogManager.GetRepository().Configured返回false,那麼log4net尚未初始化。

假設你已經在你的XML配置,將需要要麼log4net.Config.XmlConfigurator.Configure(…)一個電話或一封集屬性像[assembly: log4net.Config.XmlConfigurator(…)]加載配置。如果它位於與app.config不同的文件中,請確保將該文件複製到輸出中。

如果已配置log4net但所有日誌級別仍處於禁用狀態,請查看LogManager.GetRepository().ConfigurationMessages.Cast<LogLog>()的結果以檢查配置問題。

如果您將您的配置添加到您的問題,它可能會有所幫助。

+0

雖然[assembly:log4net.Config.XmlConfigurator(Watch = true)]位於使用的類庫中對於該服務,它實際上並不在項目組件文件中標記爲該服務。 – 2015-02-25 19:07:04