.NET单元测试项目中如何避免Serilog日志写入相对路径?
解决Serilog单元测试项目日志路径问题
单元测试项目默认工作目录是输出目录(如bin/Debug/net7.0),直接使用相对路径Logs/log-.txt会指向该目录下的Logs文件夹,而非项目根目录。可以通过以下两种方式调整:
方法一:代码中动态获取项目根目录(推荐)
通过测试项目的程序集信息定位到项目根目录,再拼接日志路径,这种方式不受运行环境影响:
using System.Reflection; using System.IO; using Serilog; // 获取测试程序集所在目录 var assemblyDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // 从输出目录向上导航到项目根目录(输出目录结构为bin/Debug/net7.0,需回退3层) var projectRoot = Directory.GetParent(assemblyDirectory)?.Parent?.Parent?.FullName; // 拼接日志文件路径 var logFilePath = Path.Combine(projectRoot ?? string.Empty, "Logs", "log-.txt"); Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.FromLogContext() .WriteTo.Async(c => c.File(logFilePath, rollingInterval: RollingInterval.Day)) .WriteTo.Async(c => c.Console()) .CreateLogger();
方法二:修改测试项目工作目录
通过IDE配置将测试项目的工作目录设置为项目根目录:
- 在Visual Studio中,右键测试项目 → 属性 → 调试
- 在"工作目录"栏输入
$(ProjectDir)(代表项目根目录) - 保存配置后,原相对路径
Logs/log-.txt会指向项目根目录下的Logs文件夹
注意事项
Serilog的File Sink会自动创建不存在的目录,无需手动创建Logs文件夹;若路径拼接失败(如projectRoot为空),会默认使用当前工作目录,建议添加空值判断避免异常。
内容的提问来源于stack exchange,提问作者Hakuna
相关产品推荐
相关产品推荐

