2013-05-17 61 views
0

我正在使用Castle Windsor日誌記錄工具,它工作得很好。我有一個安裝程序,它註冊一個攔截器和一個連接事件的工具,這樣我就可以保持大部分代碼不會意識到Castle和log4net。我可以在登記階段使用Castle Logging設施嗎?

我的大多數登記發生在代碼中,但對於記錄我在web.config(安裝在前)掛鉤起來是這樣的:

<castle>   
    <facilities> 
     <facility id="logging" 
       type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" loggingApi="log4net" /> 
    </facilities> 
    <installers> 
     <install type="MyProject.LoggerInstaller,MyProject" /> 
    </installers> 
</castle> 

的原因是,我沒有包括這個配置部分,當我去生產。這也意味着我可以非常容易地從log4net切換到nlog,以便我們可以隨時隨地執行其他任何操作。並且意味着我的組件都不必直接引用log4net。

我遇到的問題是我想在註冊階段本身使用一些日誌記錄。我這樣做是因爲註冊有點複雜,我希望能夠輕鬆地關注正在發生的事情以及需要多長時間。 (主要是因爲我有一個插件類型系統。)

在我的LoggerInstaller中,我正在嘗試解析ILoggerFactory,以便我可以創建一個記錄器並在其實用程序對象中爲它掛接一些事件。但這種失敗,此:

ComponentNotFoundException: No component for supporting the service Castle.Core.Logging.ILoggerFactory was found 

從繞青山源挖我認爲所有安裝任何設備之前安裝,所以會出現該設施尚未安裝我裏面初始化。如果我創建了第二個安裝程序來連接事件,以便它不會通過XML配置發生,那麼它就可以工作,但我希望所有日誌都相關在一起 - 並且如果日誌記錄不正確,則掛接事件沒有任何意義不可用。 (我不知道如何記錄是否啓用.. ??)

理想情況下,我想從我的安裝程序註冊Castle Logging設施,但我不知道如何包裝它的可配置元素。 (或者我是否願意。)

有沒有更簡單的方法?我懷疑我沒有做一些通常是好主意的事情,因爲我知道我不應該在註冊階段解決問題。但我認爲安裝足夠複雜以保證一點點記錄。

有沒有其他人做過這種事情?任何幫助(或轉向更正確的道路!)將不勝感激。

回答

1

如果問題確實是在安裝完成後,你可以嘗試以下方法後纔將出現記錄器工廠註冊號:

製作2配置部分castle1 castle2。

<castle1>   
    <facilities> 
     <facility id="logging" 
      type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" loggingApi="log4net" /> 
    </facilities> 
</castle1> 

<castle2>   
    <installers> 
     <install type="MyProject.LoggerInstaller,MyProject" /> 
    </installers> 
</castle2> 

和初始化2步容器:

container.Install(new ConfigurationInstaller(new XmlInterpreter(new ConfigResource("castle1")))); 
container.Install(new ConfigurationInstaller(new XmlInterpreter(new ConfigResource("castle2")))); 

而且你必須指定castle1和castle2節你CONFIGFILE的頂部。

我還沒試過,但我覺得值得一試。

親切的問候, Marwijn

+0

謝謝!今天早上我嘗試了一下,它完美的工作! – John

相關問題