.net core Serilog-添加“删除”;严重性“;属性到GKE的LogEvent的顶层?
在GKE的.NET核心应用程序中,我将Serilog与.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
Serilog.Formatting.Json.JsonFormatter
formatter一起使用。我正在登录控制台,该控制台由GKE日志代理读取。GKE日志代理希望日志事件的顶级具有“严重性”属性:
因此,我的所有日志都显示在GCP日志中,严重性为“Info”,因为SerilogLevel
位于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日志级别的严重性,下一个表可能也会帮助您 塞里洛格 堆垛机 冗长的 调试 调试 调试 问询处 信息 警告 警告 错误 错误 致命的 批评的
编写自己的格式化程序似乎是解决这个问题的方法。