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

修改Serilog日志文件路径到上层目录时路径分隔符乱码问题求助

解决方案

核心原因说明

路径分隔符被替换为特殊字符、仅能写入项目根目录的问题,由两类常见错误导致:

  1. 低版本Serilog.Sinks.File存在Windows路径解析缺陷,会将盘符冒号、路径分隔符识别为非法文件名字符替换
  2. 缺少Serilog.Settings.Configuration依赖包,或初始化Serilog时未加载appsettings.json配置,导致配置不生效,默认写入项目根目录

修复步骤

1. 依赖版本校验

  • 安装/升级Serilog.Sinks.File到5.0.0及以上版本
  • 安装Serilog.Settings.Configuration包,确保支持从配置文件读取Serilog参数

2. 修正初始化顺序

Serilog必须在应用宿主构建前读取配置完成初始化,参考代码如下:

// 第一步:加载配置文件
var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

// 第二步:从配置初始化Serilog
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(config)
    .CreateLogger();

// 第三步:初始化应用宿主
try
{
    Log.Information("服务启动中");
    var builder = WebApplication.CreateBuilder(args);
    // 服务注册逻辑...
    var app = builder.Build();
    // 中间件配置逻辑...
    app.Run();
}
catch (Exception ex)
{
    Log.Fatal(ex, "服务启动异常");
}
finally
{
    Log.CloseAndFlush();
}

3. 相对路径配置方法

要实现相对路径存储日志,可选择以下两种方式:

  • 直接在appsettings.json中配置相对路径,推荐使用正斜杠避免JSON转义问题:
"path": "./structured-logs/logs.txt"
  • 代码中显式拼接路径(兼容性更强,可避免部署时工作目录偏移问题):
// 示例:日志存储到程序运行目录上级的structured-logs文件夹下
var logBasePath = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), "../structured-logs"));
Directory.CreateDirectory(logBasePath); // 自动创建目录避免写入失败
Log.Logger = new LoggerConfiguration()
    .WriteTo.File(
        path: Path.Combine(logBasePath, "logs.txt"), 
        rollingInterval: RollingInterval.Day,
        outputTemplate: "{Timestamp:G} {Message}{NewLine:1}{Exception:1}")
    .ReadFrom.Configuration(config)
    .CreateLogger();

4. 额外排查项

  • 确认appsettings.json文件的「复制到输出目录」属性设置为「如果较新则复制」
  • 若需在路径中使用环境变量,不要直接写%变量名%格式,需安装Serilog.Expressions包后使用${Env:变量名}格式解析

内容的提问来源于stack exchange,提问作者baiqilongma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:15:04