You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:42:42