.net core Serilog-添加“删除”;严重性“;属性到GKE的LogEvent的顶层?

.net core Serilog-添加“删除”;严重性“;属性到GKE的LogEvent的顶层?,.net-core,google-kubernetes-engine,serilog,stackdriver,google-cloud-logging,.net Core,Google Kubernetes Engine,Serilog,Stackdriver,Google Cloud Logging,在GKE的.NET核心应用程序中,我将Serilog与Serilog.Formatting.Json.JsonFormatterformatter一起使用。我正在登录控制台,该控制台由GKE日志代理读取。GKE日志代理希望日志事件的顶级具有“严重性”属性: 因此,我的所有日志都显示在GCP日志中,严重性为“Info”,因为SerilogLevel位于GCP日志条目的jsonPayload属性中。下面是一个在云日志中看到的日志条目示例: { insertId: "1cu507tg

在GKE的.NET核心应用程序中,我将Serilog与
Serilog.Formatting.Json.JsonFormatter
formatter一起使用。我正在登录控制台,该控制台由GKE日志代理读取。GKE日志代理希望日志事件的顶级具有“严重性”属性:

因此,我的所有日志都显示在GCP日志中,严重性为“Info”,因为Serilog
Level
位于GCP日志条目的
jsonPayload
属性中。下面是一个在云日志中看到的日志条目示例:

{
    insertId: "1cu507tg3by7sr1"
    jsonPayload: {
        Properties: {
            SpanId: "|a85df301-4585ee48ea1bc1d1."
            ParentId: ""
            ConnectionId: "0HM64G0TCF3RI"
            RequestPath: "/health/live"
            RequestId: "0HM64G0TCF3RI:00000001"
            TraceId: "a85df301-4585ee48ea1bc1d1"
            SourceContext: "CorrelationId.CorrelationIdMiddleware"
            EventId: {2}
        }
        Level: "Information"
        Timestamp: "2021-02-03T17:40:28.9343987+00:00"
        MessageTemplate: "No correlation ID was found in the request headers"
    }
    resource: {2}
    timestamp: "2021-02-03T17:40:28.934566174Z"
    severity: "INFO"
    labels: {3}
    logName: "projects/ah-cxp-common-gke-np-946/logs/stdout"
    receiveTimestamp: "2021-02-03T17:40:32.020942737Z"
}
我的第一个想法是使用Enricher添加一个“Severity”属性:

class SeverityEnricher : ILogEventEnricher
{
    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
    {
        logEvent.AddOrUpdateProperty(
            propertyFactory.CreateProperty("Severity", LogEventLevel.Error));
    }
}
生成的日志在GCP中看起来像这样,并且仍然标记为Info:

{
    insertId: "wqxvyhg43lbwf2"
    jsonPayload: {
        MessageTemplate: "test error!"
        Level: "Error"
        Properties: {
            severity: "Error"
        }
        Timestamp: "2021-02-03T18:25:32.6238842+00:00"
    }
    resource: {2}
    timestamp: "2021-02-03T18:25:32.623981268Z"
    severity: "INFO"
    labels: {3}
    logName: "projects/ah-cxp-common-gke-np-946/logs/stdout"
    receiveTimestamp: "2021-02-03T18:25:41.029632785Z"
}
Serilog中是否有任何方法可以将“严重性”属性添加到与“jsonPayload”相同的级别,而不是添加到其内部?我怀疑GCP随后会将其拾取并适当记录错误类型。

作为最后的手段,我可能会使用GCP日志记录接收器,但我当前的设置更加方便,并且在GKE日志代理已经存在的情况下性能更好


下面是一篇相关的堆栈溢出帖子,没有任何信息或建议超出我已有的范围,这还不足以解决此问题:

我发现以下信息详细说明了每个SeriLog到Stackdriver日志级别的严重性,下一个表可能也会帮助您

塞里洛格 堆垛机 冗长的 调试 调试 调试 问询处 信息 警告 警告 错误 错误 致命的 批评的
编写自己的格式化程序似乎是解决这个问题的方法。