我们正在编写单元测试,针对在.NET 4.0下运行的业务层。该业务层是一个简单的C#类库,通常在SOAP和REST web服务中运行。我们的应用程序使用log4net进行日志记录,而log4net位于一个单独的包装程序集中。日志程序集中的C#代码具有程序集信息指示符,告诉log4net配置文件的名称,例如-
[assembly: log4net.Config.XmlConfigurator(ConfigFile="AcmeLogging.config", Watch=true)]
通过包装程序初始化log4net可在web服务中正常工作。但当我们从单元测试程序集中初始化时,似乎无法看到配置文件。该配置文件通过属性配置为将其复制到执行目录,并且我们确实可以在bin\debug目录中看到它。从该目录中运行的快速控制台测试程序使用日志程序集也工作正常。奇怪的是,行为问题是间歇性的,并且在不同的开发人员机器上在不同的时间出现,并且无法以任何确定性方式进行治愈。
通过包装器程序集代码逐步调试,log4netLogManager.GetLogger()调用似乎返回正确,但由log.Logger.Repository.GetAppenders()返回的附加程序列表为空。由于无论文件是否位于Bin\Debug文件夹中,这种不正确的行为都是相同的,因此我们认为它无法看到该文件。
如果您对在Microsoft测试框架中运行log4net有任何提示,将不胜感激。