log4net包装器不记录(在MSTest UTs期间)

时间:2011-10-18 09:21:47

标签: c# .net visual-studio log4net mstest

我有一个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有什么建议吗?

4 个答案:

答案 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中。