【发布时间】:2013-03-22 22:27:09
【问题描述】:
我更喜欢 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));
在EndpointConfig 中的Configure.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 配置不在 app.config 中)
- 观察外部配置文件,以便反映对外部配置文件的任何更改。
【问题讨论】:
-
确保将 IWantCustomLogging 添加到端点配置中?
-
我相信我在第二个选项中做到了,但我会再检查一次并告诉你。
-
[assembly: log4net.Config.XmlConfigurator(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 设置重定向,但不被监视。
标签: log4net nservicebus