【问题标题】:log4net wrapper doesn't log (during MSTest UTs)log4net 包装器不记录(在 MSTest UT 期间)
【发布时间】:2011-12-09 22:34:21
【问题描述】:

我有一个用于 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% 确定它是否可能根本找不到配置文件。它在编译时被复制并位于与包含记录器类的程序集相同的文件夹中,所以我认为应该可以。

bleh.. 卡住了三个小时。 :T 有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    我的通灵调试器说您的 LoggerConfig.log4net 不在正确的目录中。它没有部署到您的测试目录,并且在运行测试时找不到。这就是没有日志输出的原因。将文件部署在测试目录中,您将记录输出。

    编辑:更准确地说,您需要将其作为部署文件添加到测试->编辑测试设置->>部署下(如此处所述:How can I get "Copy to Output Directory" to work with Unit Tests?

    【讨论】:

    • mmm.. 你说得对,我想知道 TestResults 子文件夹中的那些“Out”文件夹 - 那里的文件不存在。然而,我担心的是我希望它“属于”记录器所在的程序集/项目,因为最后,我想在没有单元测试程序集的情况下部署库。有没有办法告诉 MSTest 复制这个文件?
    • 我不确定,但我认为您可以将文件添加到部署文件中。但是在单元测试的情况下,您的配置文件必须来自单元测试项目(否则,如果您更改日志记录设置,您的单元测试将失败)。我会尝试添加文件并标记用于部署。
    • 啊,可以在Test->Edit Test Settings->>Deployment下将其添加为部署文件(如下所述:stackoverflow.com/questions/227545/…
    【解决方案2】:

    您是否尝试过通过绝对路径引用配置文件?可能 MSTests 的根目录与 Console App 根目录不同?

    【讨论】:

      【解决方案3】:

      Log4net 在 App.config 中使用配置?尝试将它们也放入测试库中?

      我知道很多库的应用程序的问题,并且配置必须只在主应用程序中。

      【讨论】:

        【解决方案4】:

        MsTest 影子复制整个地方的东西,因为对等和 Hinek 说文件的位置可能是问题所在。我发现在测试程序集中包含文件是解决这个问题的一种方法。

        查看以前的answer here 了解详情。

        【讨论】:

        • 我想这会起作用..但我不想这样做,因为库用户应该能够在部署后选择日志记录位置和级别。 (见上面的评论)
        猜你喜欢
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多