我有一个log4net的包装类,用于记录一组dll库中的多个类和程序集。 (这可能是设计不佳,但是......不要问) 代码基本上如下所示:
public static class Logger
{
private static ILog log;
static Logger()
{
log = LogManager.GetLogger("abcd");
XmlConfigurator.Configure(new FileInfo("LoggerConfig.log4net"));
log.Info("=== NEW SESSION ===");
}
public static void Log(string message)
{
log.Debug(message);
}
}
现在..如果静态构造函数是一个简单可执行文件的静态主程序,这很好用(我很快就制作了一个控制台应用程序来测试它)。但在这里却没有。 由于我处理独立程序集而不是可执行程序,因此我可以轻松测试记录程序的唯一方法是通过MSTest。这可能是导致此问题的原因。我不是100%肯定,如果它可能根本找不到配置文件。它在编译时被复制并且与包含记录器类的程序集位于同一文件夹中,所以我认为这应该可行。
从三小时开始,卡住了。 :T有什么建议吗?答案 0 :(得分:5)
我的通灵调试器说你的LoggerConfig.log4net不在正确的目录中。它未部署到您的测试目录,并且在运行测试时未找到。这就是没有日志输出的原因。在测试目录中部署文件,您将获得日志输出。
编辑:更准确地说,您需要将其添加为测试下的部署文件 - >编辑测试设置 - >>部署(如此处所述:How can I get "Copy to Output Directory" to work with Unit Tests?)
答案 1 :(得分:0)
您是否尝试过绝对路径引用配置文件?也许MSTests的根目录与Console App根目录不同?
答案 2 :(得分:0)
MsTest shadow会复制整个地方的内容,而且同行和Hinek说文件的位置可能就是问题所在。我发现在测试程序集中包含文件是解决这个问题的一种方法。
查看之前的answer here了解详情。
答案 3 :(得分:0)
Log4net在App.config中使用配置?试着把它们也放在测试库中吗?
我知道Application有很多库的问题,de config只能在Main-Application中。