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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:07:33