如何配置ASP.NET Core默认日志将Error级别日志输出到stderr?
可以配置ASP.NET Core默认日志记录器将Error级别日志输出到stderr
当然可以实现这个需求,以下是两种适配你现有JSON格式配置的方案:
方案一:拆分日志级别到不同输出流
通过为不同日志级别分别配置JSON控制台日志,指定Error及以上级别输出到stderr:
// 配置非Error级别日志输出到stdout builder.Logging.AddJsonConsole(options => { options.IncludeScopes = false; options.TimestampFormat = "HH:mm:ss "; options.JsonWriterOptions = new JsonWriterOptions { Indented = true }; // 仅筛选Error以下的级别 options.Filter = (_, logLevel) => logLevel < LogLevel.Error; }); // 配置Error及以上级别日志输出到stderr builder.Logging.AddJsonConsole(options => { options.IncludeScopes = false; options.TimestampFormat = "HH:mm:ss "; options.JsonWriterOptions = new JsonWriterOptions { Indented = true }; // 仅筛选Error及以上级别 options.Filter = (_, logLevel) => logLevel >= LogLevel.Error; options.FormatterName = "stderr-json"; }).AddConsoleFormatter<JsonConsoleFormatter, JsonConsoleFormatterOptions>(options => { options.IncludeScopes = false; options.TimestampFormat = "HH:mm:ss "; options.JsonWriterOptions = new JsonWriterOptions { Indented = true }; }, "stderr-json", (_, opts) => new ConsoleLoggerProvider(opts, () => Console.Error));
方案二:自定义ConsoleLoggerProvider
直接创建两个日志提供器,分别对应stdout和stderr的输出目标:
// 注册JSON格式器 builder.Logging.AddConsoleFormatter<JsonConsoleFormatter, JsonConsoleFormatterOptions>(options => { options.IncludeScopes = false; options.TimestampFormat = "HH:mm:ss "; options.JsonWriterOptions = new JsonWriterOptions { Indented = true }; }, "custom-json"); // 非Error级别输出到stdout builder.Logging.AddProvider(new ConsoleLoggerProvider(new ConsoleLoggerOptions { FormatterName = "custom-json", Filters = { { "*", LogLevel.Trace } } }, () => Console.Out, level => level < LogLevel.Error)); // Error及以上级别输出到stderr builder.Logging.AddProvider(new ConsoleLoggerProvider(new ConsoleLoggerOptions { FormatterName = "custom-json", Filters = { { "*", LogLevel.Error } } }, () => Console.Error, level => level >= LogLevel.Error));
验证
使用你原有的代码测试:
_logger.LogError("Test error log");
此时这条Error日志会输出到stderr,而Info、Debug等其他级别日志仍输出到stdout,同时保持你配置的JSON格式。
内容的提问来源于stack exchange,提问作者beseus
相关产品推荐
相关产品推荐

