.NetCore 日志在 GCP Stackdriver 中输出错误的严重性

Posted

技术标签:

【中文标题】.NetCore 日志在 GCP Stackdriver 中输出错误的严重性【英文标题】:.NetCore log output wrong severity in GCP Stackdriver 【发布时间】:2020-11-10 23:28:29 【问题描述】:

.netcore 应用程序的默认日志条目被写入标准输出,并由 GCP Stackdriver 解释为 info 消息,即使它是 错误。有没有办法将 .netcore 错误写入 stderr 或以某种方式配置它们,以便 Stackdriver 将它们解释为错误?

Stackdriver 日志条目:

.netcore 应用程序日志条目:

【问题讨论】:

没有默认的日志条目,你必须配置它。您发布的内容是因为某处添加了控制台日志记录而生成的。那可能是通用主机构建器或其他东西。您是如何配置日志记录的? 您可以使用 GCP 的ASP.NET Core integration 将日志事件直接发送到 StackDriver,而不是通过标准输出 @PanagiotisKanavos looks like 从 aspnetcore 2.2 开始有一个默认的日志记录配置;我将尝试使用 GCP 的 ASP.NET Core 集成,虽然我不明白它如何让 Stackdriver 正确解释严重性。 如果您坚持写入控制台,则必须删除默认控制台记录器并添加另一个。 Microsoft.Extensions.Logging.Console 记录器是非常 基本的,具有硬编码格式,可以在不同的行中写入单个事件的一部分。它不能被定制,也不意味着——它只是最基本的默认值。 Serilog 的控制台提供程序提供了广泛的自定义,但是当您已经可以将事件发送到 StackDriver 时,为什么还要使用 控制台 @PanagiotisKanavos 默认的日志条目是指默认的控制台记录器,我不坚持要登录到控制台,所以清除默认的提供程序并直接登录到 Stackdriver 如果适合我的话。我删除了默认的控制台记录器并添加了谷歌的记录器工厂,并且 Stackdriver 开始正确解释日志条目的严重性,谢谢 【参考方案1】:

per Panagiotis Kanavos@:

如果您坚持写入控制台,则必须删除默认控制台记录器并添加另一个。 Microsoft.Extensions.Logging.Console 记录器非常基础,采用硬编码格式,将单个事件的各个部分写入不同的行。它不能被定制,也不意味着——它只是最基本的默认值。 Serilog 的控制台提供程序提供了广泛的自定义功能,但既然您已经可以向 StackDriver 发送事件,为什么还要使用控制台呢?

这确实解决了最初的问题,每个 Kiramm@:

我删除了默认控制台记录器并添加了 Google 的记录器工厂,Stackdriver 开始正确解释日志条目的严重性

【讨论】:

以上是关于.NetCore 日志在 GCP Stackdriver 中输出错误的严重性的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 标记日志到 gcp 日志查看器

GCP 基于日志的监控:未收到日志时触发警报

Stackdriver GCP 中的日志保留

如何配置 Terraform 以根据 GCP 的日志错误触发警报?

Firebase 身份验证日志 - GCP

统计指定时间内的 GCP 日志条目数