2013-03-22 60 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