我的 TopShelf 托管的 Windows 服务之一是创建如下所示的重复日志文件:
myapp.20140729.log
myapp.20140729.log.20140729.log
之前在 StackOverflow 上已经描述了一个类似的问题 - 10639682中的解决方案对我不起作用,但579688表明它可能是由两次初始化日志系统引起的。
我正在使用 TopShelf Log4Net 插件,但我也在做自己的 log4net 日志记录,并且需要ILog
在服务实际启动之前访问实例,所以我的代码如下所示:
public static void Main(string[] args) {
XmlConfigurator.Configure();
var log = LogManager.GetLogger(typeof(MyService));
var container = new Container();
RegisterComponents(container, log);
log.InfoFormat("Starting MyService");
RunService(container);
}
public static void RunService(Container container) {
HostFactory.Run(x => {
x.Service<PortalAdaptor>(s => {
s.ConstructUsing(name => container.Resolve<MyService>());
s.WhenStarted(f => f.Start());
s.WhenStopped(f => f.Stop());
});
x.RunAsLocalService();
x.SetDescription("My Service");
x.SetDisplayName("My Service");
x.SetServiceName("MyService");
x.UseLog4Net();
});
}
我做了一些挖掘,似乎x.UseLog4Net()
在我的RunService
方法中调用实际上XmlConfigurator.Configure()
又在运行- 请参阅TopShelf 代码中的Log4NetLogWriterFactory,第 62 行。
所以...
- 我认为
XmlConfigurator.Configure()
两次调用可能是导致我的重复日志文件问题的原因是否正确? - 如果是这样 - 我如何将现有配置注入 TopShelf,或者在我启动服务之前让 TopShelf 初始化运行,以便我可以在服务启动之前开始记录?