2009-08-30 69 views
2

我有我的log4net的包裝和log4net的DLL在其自己的類加載的項目及log4net.config我已經添加了以下到類項目的AssemblyInfo.cs類項目不從主要項目

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

所以我主項目有log4net.config文件,日誌在我的主項目中工作。

我也有另一個類項目(與log4net無關),我的主要項目(日誌正在工作)調用類項目。所以我輸入新的類項目需要記錄的東西,但IsDebugEnabled返回false ..這是行

 LogManager.GetLogger("DebugLogger").IsDebugEnabled; 

所以主體工程(webproject),其中有TRUE參考我的日誌類的回報,而是一類項目我從我的主項目調用返回false。

看來,類項目不讀取log4net

任何想法?

回答

0

如果我按照正確的,你的設置是這樣的:

Web項目(web.config文件和log4net.config)

  • 引用記錄包裝
  • 引用類庫項目

伐木包裝

  • 參考log4net的
  • 包含裝配:XmlConfigAttribute

類庫項目

  • 參考log4net的

雖然你沒有張貼在你的log4net的 「包裝」 類中的任何細節,我假設你的Web Project不是直接訪問log4net,而是通過你的包裝器。

根據my last answer,log4net正在解析config並在您的wrapper項目中構建日誌存儲庫。雖然我相當確定有only one repository per AppDomain,這聽起來像你的類庫項目沒有找到默認的存儲庫。由於它在AppDomain級別,所以我懷疑它直接對包裝器組件是獨佔的。

相反,這聽起來像是一個計時問題。如果你先調用包裝器然後再調用你的類庫,會發生什麼?我懷疑你會發現,如果你首先調用你的類庫項目,你將不會得到一個記錄器。但是,如果第一次日誌記錄調用是針對包裝的,則任何後續的記錄器請求都應該起作用。這是因爲wrapper項目包含配置設置信息,並且第一次調用將爲AppDomain配置日誌記錄存儲庫。

雖然我不是包裝log4net的巨大粉絲,但可以通過在應用程序啓動邏輯中強制對包裝器進行調用,或者讓您的類庫項目使用包裝器來解決此問題。請記住,如果使用包裝器概念,您的類庫將無法利用所有內置功能的log4net(如IsDebugEnabled),您將不得不通過包裝器解決這些設置。

+0

感謝布賴恩,是的,我發現你的其他答案非常有幫助..我使用ThreadContext與類包裝..所以我的代碼是登錄它出現,但它是相同的threadcontext - 如果這是有道理的..因此我需要調查 – 2009-09-04 14:14:31

1

建築時是否將Log4Net.config文件複製到目錄?您要確保Log4Net.config始終在屬性中複製。

我也會重新考慮把它放在單獨的文件中。我喜歡一個配置文件而不是幾個。正如你所看到的,很難處理不同的配置文件。

+0

yes是的,我自成立以來它不是一個問題與log4net ..我使用ThreadContext與類包裝..所以我的代碼是登錄它出現,但它是相同的threadcontext - 如果這有什麼意義...因此我需要調查 – 2009-09-04 14:13:50