如何仅在调试应用时输出日志到Console,生产环境仅写入文件?
Serilog 调试/生产环境差异化日志输出配置(JSON版)
要实现调试时输出日志到控制台+文件,生产环境仅写入文件的需求,只需在现有JSON配置基础上做以下修改:
步骤1:添加必要的Sink包
确保项目已安装 Serilog.Sinks.Console NuGet包,用于控制台日志输出。
步骤2:修改JSON配置文件
更新后的完整配置如下:
{ "Serilog": { "Using": [ "Serilog.Sinks.File", "Serilog.Filters.Expressions", "Serilog.Sinks.Console" ], "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning" } }, "WriteTo": [ // 仅调试环境输出到控制台 { "Name": "Logger", "Args": { "configureLogger": { "Filter": [ { "Name": "ByIncludingOnly", "Args": { "expression": "EnvironmentVariable('ASPNETCORE_ENVIRONMENT') = 'Development' or EnvironmentVariable('DOTNET_ENVIRONMENT') = 'Development'" } } ], "WriteTo": [ { "Name": "Console", "Args": { "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console" } } ] } } }, // 信息/警告日志写入info.log { "Name": "Logger", "Args": { "configureLogger": { "Filter": [ { "Name": "ByExcluding", "Args": { "expression": "@Level = 'Error' or @Level = 'Fatal'" } } ], "WriteTo": [ { "Name": "File", "Args": { "path": "./logs/info.log", "rollingInterval": "Day" } } ] } } }, // 错误/致命日志写入error.log { "Name": "File", "Args": { "path": "./logs/error.log", "restrictedToMinimumLevel": "Error", "rollingInterval": "Day" } } ], "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ] } }
关键配置说明
- 控制台输出过滤:通过
ByIncludingOnly过滤器判断.NET环境变量,仅当ASPNETCORE_ENVIRONMENT或DOTNET_ENVIRONMENT为Development时,才启用控制台日志输出。若使用自定义环境变量(比如APP_ENV=Debug),可将表达式改为EnvironmentVariable('APP_ENV') = 'Debug'。 - 文件输出逻辑保留:原有文件写入规则不受环境影响,调试和生产环境都会将对应级别日志写入指定文件。
环境变量设置
- 调试阶段:在开发工具(如Visual Studio)中设置环境变量为
Development,即可同时看到控制台和文件日志。 - 生产环境(Windows服务):服务运行时环境变量默认为
Production,控制台输出会自动被过滤,仅保留文件日志。
内容的提问来源于stack exchange,提问作者Álvaro García
相关产品推荐
相关产品推荐

