NServiceBus和Log4Net外部配置文件

ami*_*t_g 3 log4net nservicebus

我更喜欢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>
Run Code Online (Sandbox Code Playgroud)

最简单的方法是在AssemblyInfo.cs中放置一个属性

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "ApplicationName.log4net.xml", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

这在NServiceBus中不起作用(我使用的是NServiceBus.Host.exe).然后我试着打电话

SetLoggingLibrary.Log4Net(() => XmlConfigurator.Configure(log4netConfigUri));
Run Code Online (Sandbox Code Playgroud)

之前Configure.WithEndpointConfig.使用此log4net从正确的位置读取配置文件,它不会注意它,所以当我更改日志级别时,它不会反映在应用程序中.

接下来我尝试使用appSettings

<appSettings>
    <add key="log4net.Config" value="ApplicationName.log4net.xml"/>
    <add key="log4net.Config.Watch" value="True"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

同样,log4net读取此内容并随后读取ApplicationName.log4net.xml,它仍然不会监视它.

如何在使用NServiceBus.Host.exe的NServiceBus服务中配置log4net

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

小智 6

如果您正在使用assembly属性,请使用:

SetLoggingLibrary.Log4Net(); // no parameters
Run Code Online (Sandbox Code Playgroud)

这应该也有效:

SetLoggingLibrary.Log4Net(() => XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo));
Run Code Online (Sandbox Code Playgroud)

或这个:

XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo)
SetLoggingLibrary.Log4Net();
Run Code Online (Sandbox Code Playgroud)


flo*_*ler 6

NServiceBus> = 5.0为log4Net提供了一个单独的nugetPackage:NServiceBus.Log4Net

而不是打电话: SetLoggingLibrary.Log4Net(x => ...);

使用以下语句:

log4net.Config.XmlConfigurator.Configure();
LogManager.Use<Log4NetFactory>();
Run Code Online (Sandbox Code Playgroud)

或者请参阅此示例,了解如何以编程方式配置appender:https: //github.com/Particular/NServiceBus.Log4Net/blob/develop/src/Sample/LoggingConfig.cs