.NET Core 2.0 MSTest项目迁移后NLog无法写入日志的问题
解决.NET Core 2.0 MSTest项目中NLog无法写入日志的问题
你已经完成了项目迁移的基础工作,但在.NET Core环境下,MSTest项目确实需要额外配置才能让NLog正常工作——毕竟.NET Core的日志体系和.NET Framework差异很大,不会自动识别并加载NLog配置。下面是具体的解决步骤:
1. 确保NLog配置文件被复制到输出目录
首先检查你的nlog.config文件属性:在Visual Studio中右键该文件,选择属性,将复制到输出目录设置为如果较新则复制(或始终复制)。如果配置文件没出现在测试项目的输出目录里,NLog根本找不到它,自然无法生成日志。
2. 集成NLog到.NET Core日志系统(依赖注入方式)
因为你已经引用了Microsoft.Extensions.DependencyInjection和NLog.Extensions.Logging,推荐通过依赖注入来配置日志。你可以在测试类的初始化方法里搭建服务容器并添加NLog:
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NLog.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class YourTestClass { private ILogger<YourTestClass> _logger; private IServiceProvider _serviceProvider; [TestInitialize] public void TestSetup() { // 构建服务容器 var services = new ServiceCollection(); // 配置日志:清除默认提供器,添加NLog services.AddLogging(loggingBuilder => { loggingBuilder.ClearProviders(); // 移除默认的Console/ Debug日志提供器 loggingBuilder.SetMinimumLevel(LogLevel.Trace); // 匹配NLog的最低级别 loggingBuilder.AddNLog(); // 集成NLog }); // 如果你的类库需要依赖注入,在这里注册服务 // services.AddScoped<YourLibraryService>(); _serviceProvider = services.BuildServiceProvider(); // 获取日志实例 _logger = _serviceProvider.GetRequiredService<ILogger<YourTestClass>>(); } [TestCleanup] public void TestTeardown() { // 关闭NLog,释放资源 NLog.LogManager.Shutdown(); } [TestMethod] public void TestLogging() { // 使用日志 _logger.LogInformation("测试日志信息"); _logger.LogTrace("测试Trace日志"); } }
3. 如果你直接使用NLog的LogManager(非DI方式)
如果你的代码里是直接通过NLog.LogManager.GetLogger("MyLogger")获取日志实例,那需要手动加载NLog配置:
[TestInitialize] public void TestSetup() { // 手动加载nlog.config配置文件 var config = new NLog.Config.XmlLoggingConfiguration("nlog.config"); NLog.LogManager.Configuration = config; }
4. 验证日志路径和权限
另外,注意${basedir}在MSTest中的指向:它通常是测试项目的输出目录(比如bin/Debug/netcoreapp2.0)或者测试运行主机的临时目录。你可以临时修改nlog.config里的fileName为绝对路径(比如c:/temp/logs/MyLogs.json)测试是否能生成日志,排除路径权限问题。也可以在代码里打印当前目录确认:
var currentDir = System.AppContext.BaseDirectory; Console.WriteLine($"当前运行目录:{currentDir}");
完成这些配置后,重新运行测试,NLog应该就能正常生成日志文件了。
内容的提问来源于stack exchange,提问作者Some User
相关产品推荐
相关产品推荐

