NServiceBus和Log4Net外部配置文件

NServiceBus和Log4Net外部配置文件,log4net,nservicebus,Log4net,Nservicebus,我更喜欢log4net的外部配置文件,因为log4net可以监视这些文件,并且可以在不更改app/web.config文件的情况下更改级别。在NServiceBus中,我正努力做到这一点。我在这里使用的是我的外部配置文件 <?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="RollingFile" type="log4net.Appender.FileAppender">

我更喜欢log4net的外部配置文件,因为log4net可以监视这些文件,并且可以在不更改app/web.config文件的情况下更改级别。在NServiceBus中,我正努力做到这一点。我在这里使用的是我的外部配置文件

<?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>
这在NServiceBus中不起作用(我使用的是NServiceBus.Host.exe)。然后我试着打电话

SetLoggingLibrary.Log4Net(() => XmlConfigurator.Configure(log4netConfigUri));
EndpointConfig
中配置.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访问的NServiceBus服务中配置log4net

  • 从外部配置文件读取配置文件(即log4net config不在app.config中)
  • 观察外部配置文件,以便反映对外部配置文件的任何更改

  • 如果使用的是assembly属性,请使用:

    SetLoggingLibrary.Log4Net(); // no parameters
    
    这也应该起作用:

    SetLoggingLibrary.Log4Net(() => XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo));
    
    或者这个:

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

    NServiceBus>=5.0有一个单独的用于log4Net的nugetPackage:

    而不是调用:
    SetLoggingLibrary.Log4Net(x=>…)

    使用以下语句:

    log4net.Config.XmlConfigurator.Configure();
    LogManager.Use<Log4NetFactory>();
    
    log4net.Config.XmlConfigurator.Configure();
    LogManager.Use();
    
    或参考此示例了解如何以编程方式配置附加器:

    确保将IWantCustomLogging添加到端点配置中?我相信我在第二个选项中已经添加了,但我会再检查一次并让您知道。[assembly:log4net.config.xmlconfigulator(ConfigFile=“ApplicationName.log4net.xml”,Watch=true)]在使用或不使用IWantCustomLogging时都没有影响。日志甚至没有定向到所需的文件,因此此设置没有影响。第二种方法重定向日志,这意味着它读取外部配置文件,但无法(据我所知)指定“Watch”属性,因此log4net不会监视该文件。在本例中,IWantCustomLogging用于端点配置。第三种方式是,log4net似乎从app.config文件读取值,因此我在端点配置中执行的操作无关紧要,但我尝试了不使用IWantCustomLogging,使用IWantCustomLogging,调用SetLoggingLibrary.log4net(log4net.config.XmlConfigurator.Configure);并且不需要调用SetLoggingLibrary.Log4Net(Log4Net.Config.XmlConfigurator.Configure);。日志已根据app.config设置重定向,但未对其进行监视。我无法使assembly属性正常工作。主持人似乎一点也不看。然而,我能够使用ConfigureAndWatch方法,这是可行的。谢谢。有件小事,不接受Uri。它需要传递FileInfo对象。我不是100%确定,但可能是因为端点加载到单独的appdomain中的方式。不过很高兴配置和手表工作正常。
    log4net.Config.XmlConfigurator.Configure();
    LogManager.Use<Log4NetFactory>();