.NET控制台应用配置Serilog仅在开发环境本地记录到文件
.NET控制台应用Serilog本地开发日志配置方案
方案一:用appsettings.Development.json实现(推荐)
完全可以通过appsettings.Development.json实现,这是.NET生态中环境配置的标准做法,无需修改核心代码,运行时根据环境自动加载配置。
步骤说明:
确保环境配置加载逻辑正确
检查配置构建代码,确保已添加环境相关的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。在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)后追加第三个输出目标(文件日志)。保持原有日志初始化代码不变
现有日志初始化代码无需修改,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
相关产品推荐
相关产品推荐

