我更喜欢使用外部配置文件来进行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中)
- 监听外部配置文件,以便任何对外部配置文件的更改都可以反映出来。