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

.NET控制台应用配置Serilog仅在开发环境本地记录到文件

.NET控制台应用Serilog本地开发日志配置方案

方案一:用appsettings.Development.json实现(推荐)

完全可以通过appsettings.Development.json实现,这是.NET生态中环境配置的标准做法,无需修改核心代码,运行时根据环境自动加载配置。

步骤说明:

  1. 确保环境配置加载逻辑正确
    检查配置构建代码,确保已添加环境相关的JSON配置文件加载:

    var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        // 加载对应环境的配置文件,不存在则忽略
        .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Production"}.json", optional: true)
        .AddEnvironmentVariables()
        .Build();
    

    运行时设置DOTNET_ENVIRONMENT=Development(可通过系统环境变量、launchSettings.json或命令行参数指定),就会自动加载appsettings.Development.json。

  2. 在appsettings.Development.json中追加文件日志配置
    由于.NET默认JSON配置对数组是替换而非追加,需通过索引语法添加新的日志输出节点,避免覆盖appsettings.json中已有的Seq和Debug配置:

    {
      "Serilog": {
        "WriteTo:2": {
          "Name": "File",
          "Args": {
            "path": "./logs/log-.txt",
            "rollingInterval": "Day",
            "retainedFileCountLimit": 7,
            "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
          }
        }
      }
    }
    

    这里WriteTo:2表示在原有WriteTo数组(索引0为Seq,1为Debug)后追加第三个输出目标(文件日志)。

  3. 保持原有日志初始化代码不变
    现有日志初始化代码无需修改,ReadFrom.Configuration(configuration)会自动合并所有加载的配置:

    Log.Logger = new LoggerConfiguration()
                   .ReadFrom.Configuration(configuration)
                   .Enrich.WithProperty("MachineName", Environment.MachineName)
                   .CreateLogger();
    

方案二:预处理器指令方案

如果需要编译时区分环境(比如仅Debug编译版本启用文件日志),可以用C#预处理器指令实现,但该方式灵活性较低,仅适合固定编译环境的场景:

var loggerConfig = new LoggerConfiguration()
                   .ReadFrom.Configuration(configuration)
                   .Enrich.WithProperty("MachineName", Environment.MachineName);

// 仅在Debug编译配置下添加文件日志
#if DEBUG
loggerConfig.WriteTo.File("./logs/log-.txt", rollingInterval: RollingInterval.Day);
#endif

Log.Logger = loggerConfig.CreateLogger();

注意:该方案依赖编译时的DEBUG符号(默认Debug配置会自动定义),Release编译版本不会包含这段代码,即使运行在开发环境也不会生成文件日志。

方案对比

方案灵活性维护成本适用场景
appsettings.Development.json高(运行时切换环境)低(配置驱动,无需改代码)绝大多数场景,支持灵活的环境切换
预处理器指令低(编译时固定)中(代码中硬编码环境逻辑)仅需在Debug编译版本启用日志的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:08:15