2011-09-06 51 views
1
我在企業系統中使用 log4net

,該系統有三個層次:log4net的堅持與WCF

  1. API
  2. 內部通知的
  3. 集成到第三方:外部通知

這些圖層通過WCF(wsHttpBinding)相互通話,每層都有一個日誌文件。 當我運行一個測試工作流時,每一層執行他的工作,但記錄器沒有寫任何東西。

任何想法?

回答

1

這裏有一些想法:

  1. 在每一層,你必須log4net.Config.XmlConfigurator.Configure(...)打個電話?在大多數情況下,人們使用Assembly屬性在AssemblyInfo.cs/Program.cs/Global.asax.cs/etc中執行此操作。但您也可以在應用程序啓動例程中的某處調用它。 看到這個頁面(「我什麼時候應該登錄我的第一條消息」):http://logging.apache.org/log4net/release/faq.html

  2. 如果您使用的是基於文件的日誌記錄,在這裏你想存儲日誌文件? - 目標目錄是否存在,並且運行該層的用戶帳戶是否具有對該文件夾的寫入權限?對於Web應用程序,用戶帳戶是App Pool身份,對於Windows Services,用戶帳戶是運行該服務的登錄。對於控制檯和Windows應用程序,用戶帳戶可能是啓動應用程序的用戶。

如果一切都失敗了,你可以打開log4net的內部調試這可能幫助:http://logging.apache.org/log4net/release/faq.html(「我如何啓用log4net的內部調試」)

+0

我忘了說只有一層沒有寫入日誌文件 –

+1

你是否知道你的問題? –

+0

是的。某些層表示「x」通過「y」向「z」發送同步呼叫,意思是「z」發送同步呼叫到「x」,而「x」沒有退出呼叫。因此,記錄器卡在死鎖 –

0

我想你已經在App.config文件中配置了log4net?一個常見的錯誤是忘記在每層的啓動代碼中調用log4net.Config.XmlConfigurator.Configure()。如果這沒有幫助,您需要向我們展示您的XML配置。

+0

我在每一層使用一個靜態實例,並調用'log4net的。 「靜態構造函數中的Config.XmlConfigurator.Configure()' –

+0

某些層稱」x「通過」y「向」z「發送同步調用**意味着當」z「發送同步調用爲」x「時,而」x「沒有退出其呼籲。因此每個公共函數都以Logger.Debug(「--- started」)開頭,並以Logger.Debug(「--- ended」)結尾,因此記錄器被鎖死。 –