2013-03-22 58 views
3

我更喜歡log4net的外部配置文件,因爲log4net可以監視這些文件,並且可以在不改變應用程序/ web.config文件的情況下更改級別。我在NServiceBus中掙扎了一下。我使用這是我的外部配置文件NServiceBus和Log4Net外部配置文件

<?xml version="1.0" encoding="utf-8" ?> 
<log4net> 
    <appender name="RollingFile" type="log4net.Appender.FileAppender"> 
    <file value="C:\Logs\NServiceBusApplication.log" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingFile" /> 
    </root> 
</log4net> 

這樣做最簡單的方法是將在AssemblyInfo.cs中的屬性

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "ApplicationName.log4net.xml", Watch = true)] 

這並不在NServiceBus工作(我用NServiceBus .Host.exe)。然後我打過電話

SetLoggingLibrary.Log4Net(() => XmlConfigurator.Configure(log4netConfigUri)); 

EndpointConfigConfigure.With之前。有了這個log4net從正確的位置讀取配置文件,它不會監視它,所以當我更改日誌級別時,它不會反映在應用程序中。

接下來,我用的appSettings

<appSettings> 
    <add key="log4net.Config" value="ApplicationName.log4net.xml"/> 
    <add key="log4net.Config.Watch" value="True"/> 
</appSettings> 

試圖再次,log4net的讀取此,並隨後讀取ApplicationName.log4net.xml,它仍然不看它。

如何配置使用NServiceBus.Host.exe到

  1. 在NServiceBus服務log4net的讀取配置文件形式的外部配置文件(即log4net的配置是不是的app.config內)
  2. 觀察外部配置文件,以便反映對外部配置文件的任何更改。
+0

確保您將IWantCustomLogging添加到您的端點配置? – 2013-03-23 06:00:17

+0

我相信我在第二個選項中這樣做了,但我會再檢查一次並讓您知道。 – 2013-03-24 05:00:55

+0

[程序集:log4net.Config.XmlConfigurator(ConfigFile =「ApplicationName.log4net.xml」,Watch = true)]對IWantCustomLogging或沒有影響。該日誌甚至沒有定向到所需的文件,因此該設置沒有影響。 – 2013-03-25 16:36:16

回答

6

如果您使用的組件屬性,使用方法:

SetLoggingLibrary.Log4Net(); // no parameters 

這也應該工作:

SetLoggingLibrary.Log4Net(() => XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo)); 

或者這樣:

XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo) 
SetLoggingLibrary.Log4Net(); 
+0

我無法使程序集屬性正常工作。主持人似乎並沒有閱讀。但是,我能夠使用ConfigureAndWatch方法並且可以工作。謝謝。 – 2013-03-27 19:15:10

+0

一個小問題,[ConfigureAndWatch](http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.ConfigureAndWatch_overloads.html)不接受Uri。它期望FileInfo對象被傳遞。 – 2013-03-27 19:19:43

+0

我不是100%確定,但可能是因爲端點加載到單獨的appdomain的方式。很高興,ConfigureAndWatch雖然工作。 – 2013-03-28 07:20:33