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

.NET Core 6使用GCP Logger时如何映射LogLevel到severity

问题根因

所有日志severity显示为INFO的核心原因:当前日志没有通过Google.Cloud.Diagnostics提供的日志提供程序直接写入Cloud Logging API,而是输出到容器标准输出(stdout)后,由GKE默认日志采集器采集上报。默认采集器不会解析日志payload里的LogLevel字段做级别映射,所有stdout输出的日志默认都会标记为INFO,你贴的日志中logName字段值为projects/myproject/logs/stdout就是直接证据。


方案一:直连Cloud Logging(官方推荐,原生支持级别映射)

你之前的配置只完成了服务注册,没有将Google Cloud日志提供程序加入.NET日志管道,所以日志默认还是走Console输出到stdout,没有走官方的日志上报通道。
调整配置步骤:

  • 移除默认的Console日志提供程序,避免日志重复上报、同时避免stdout采集的默认INFO级别标记干扰
  • 调用AddGoogleDiagnosticsForAspNetCore时传入正确的项目、服务参数,自动注册日志提供程序,内置的日志组件会自动完成.NET LogLevel到GCP severity的映射

配置代码示例:

var builder = WebApplication.CreateBuilder(args);
// 清除默认控制台日志输出
builder.Logging.ClearProviders();
// 注册Google诊断组件,自动接入日志、链路追踪、错误报告
builder.Services.AddGoogleDiagnosticsForAspNetCore(
    projectId: "替换为你的GCP项目ID",
    serviceName: "替换为你的API服务标识",
    serviceVersion: builder.Environment.EnvironmentName
);

官方内置的级别映射规则如下:

  • .NET LogLevel.Trace、LogLevel.Debug → GCP Severity DEBUG
  • .NET LogLevel.Information → GCP Severity INFO
  • .NET LogLevel.Warning → GCP Severity WARNING
  • .NET LogLevel.Error → GCP Severity ERROR
  • .NET LogLevel.Critical → GCP Severity CRITICAL

配置生效后,上报的日志logName会变为projects/[你的项目ID]/logs/dotnet,severity字段会自动正确赋值。


方案二:保留stdout输出,配置GKE采集器自定义映射

如果不想走API直连上报,保留日志输出到stdout的模式,需要修改GKE侧的日志采集规则,让采集器主动解析日志里的LogLevel字段映射为severity。
操作步骤:

  • 配置Console日志输出为结构化JSON格式,确保LogLevel字段在日志顶层:
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddJsonConsole(options =>
{
    options.IncludeScopes = false;
    options.TimestampFormat = "yyyy-MM-ddTHH:mm:ss.fffZ";
    options.JsonWriterOptions = new System.Text.Json.JsonWriterOptions
    {
        Indented = false
    };
});
  • 修改GKE集群默认日志采集器(1.23+版本默认是Fluent Bit)的配置,添加字段解析和映射规则:
[FILTER]
    Name             parser
    Match            kube.*
    Key_Name         log
    Parser           json
    Reserve_Data     On
[FILTER]
    Name             modify
    Match            kube.*
    Rename           LogLevel severity
    # 映射.NET LogLevel枚举值到GCP标准severity值
    Add_Map_For_Key  severity ERROR Error
    Add_Map_For_Key  severity CRITICAL Critical
    Add_Map_For_Key  severity WARNING Warning
    Add_Map_For_Key  severity DEBUG Debug
    Add_Map_For_Key  severity INFO Information
    Add_Map_For_Key  severity DEBUG Trace

注意:如果使用GKE Autopilot集群,默认日志采集器配置不支持自定义修改,只能选择方案一的直连上报模式。

配置完成后到Logs Explorer验证,Error、Critical等级别的日志会正确匹配对应severity,不会全部显示为INFO。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:51:24