log4net - NServiceBus 和 Log4Net 外部配置文件

标签 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>

最简单的方法是在 AssemblyInfo.cs 中放置一个属性
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "ApplicationName.log4net.xml", Watch = true)]

这在 NServiceBus 中不起作用(我使用的是 NServiceBus.Host.exe)。然后我试着打电话
SetLoggingLibrary.Log4Net(() => XmlConfigurator.Configure(log4netConfigUri));

之前 Configure.WithEndpointConfig .使用此 log4net 从正确位置读取配置文件,它不会监视它,因此当我更改日志级别时,它不会反射(reflect)在应用程序中。

接下来我尝试使用 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 配置不在 app.config 中)
  • 观察外部配置文件,以便反射(reflect)对外部配置文件的任何更改。
  • 最佳答案

    如果您使用的是程序集属性,请使用:

    SetLoggingLibrary.Log4Net(); // no parameters
    

    这也应该有效:
    SetLoggingLibrary.Log4Net(() => XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo));
    

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

    关于log4net - NServiceBus 和 Log4Net 外部配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580850/

    相关文章:

    c# - 如何让 Log4Net 在控制台应用程序中写入 EventLog?

    asp.net-core - log4net:ERROR使用空'element'参数调用的ConfigureFromXml

    c# - 需要在消息处理程序中引用的全局对象

    c# - NServiceBus 传奇不起作用

    c# - Log4Net可以自动删除日志文件吗?

    c# - log4net BasicConfigurator 未在控制台上打印

    c# - Log4Net - 为级别类型设置 conversionPattern

    nhibernate - 如何删除 NHibernateMessageModule 在 NServiceBus 中的调用?

    iis-6 - 从 MVC .Net 访问 NServiceBus MSMQ 的权限错误

    NServiceBus队列概念