c# - log4net 包装器不记录(在 MSTest UT 期间)

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

哎呀..卡了三个小时了。 :有什么建议吗?

最佳答案

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

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

关于c# - log4net 包装器不记录(在 MSTest UT 期间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7805030/

相关文章:

c# - 尽管将 PreserveReferencesHandling 设置为 "None",Json.Net 仍将 $id 添加到 EF 对象

c# - 将泛型传递给方法

c# - 如何在不使用 `DisplayNameAttribute` 的情况下更改 ViewModel 显示名称?

visual-studio - .NET vNext 只使用引用包中的一个 dll

c# - 在 C# 控制台窗口中打印

.net - GData OAuthUtil.GetAccessToken不返回refresh_token值

c# - C# 的对象缓存

.net - 是否可以指定 regasm 创建的 ClassID 注册表项的默认值?

visual-studio - 在团队资源管理器中输入检查评论后,是否有用于检查的键盘快捷键?

visual-studio - "Find in Files"的替代方案