2013-04-16 34 views
2

我正在爲ServiceStack創建一個包含某些服務的插件。但是,我希望這些服務能夠登錄到另一個數據庫(在我的情況下)AppHost中的其他服務。對於同一個AppHost,是否有可能在ServiceStack中有更多的Loggers?

是否可以在AppHost中註冊2個ILog接口?

ServiceStack.Logging.LogManager.GetLogger(GetType())將始終返回一個ILog接口。我是否需要爲其他Logger創建第二個ILog實現?

我正在使用NLog。

回答

1

我對ServiceStack並不熟悉,所以我的建議可能沒有道理(但是在單獨考慮NLog時確實有意義)。

難道你不能在NLog.config文件中配置另一個目標並配置你的記錄器寫入該目標嗎?

例如...

配置在NLog.config一些目標(我配置控制檯目標和文件目標)

<targets> 
    <target name="file" xsi:type="File" layout="${longdate} | ${level} | ${logger} | ${message}" fileName="${basedir}/${shortdate}.log" /> 
    <target name="console" xsi:type="ColoredConsole" layout="${longdate} | ${level} | ${logger} | ${message}" /> 
    </targets> 

配置一些規則

<rules> 
    <logger name="Your.Name.Space1.*" minlevel="Trace" writeTo="file" /> 
    <logger name="Your.Name.Space2.*" minlevel="Trace" writeTo="file" /> 
    <logger name="*" minLevel="Trace" writeTo="console" /> 
</rules> 

現在,Your.Name.Space1和Your.Name.Space2中的所有類都將登錄到「文件」目標,而其他所有類都將登錄到「控制檯」目標。如果您希望他們的日誌只出現在「文件」目標中,您可以將"final=true"添加到您的類的記錄器中。

我認爲應該讓所有你做你想做的事情。

+0

感謝@wageoghe對此建議。在我的情況下,這是可能的,因爲ServiceStack插件是一個單獨的類庫,實際上有一個不同的名稱空間。所以這可以確實工作! –

相關問題