GCP 错误报告中仅显示一些 Winston logger.error 调用

Only some Winston logger.error calls appear in the GCP error reporting

提问人:cis 提问时间:10/21/2022 更新时间:11/2/2022 访问量:472

问:

我在 GCP 上的Node.js应用程序中使用 Winston,如下所述: https://cloud.google.com/logging/docs/samples/logging-winston-quickstart 从某种意义上说,这是我在日志资源管理器中看到我期望的日志的工作原理。

我现在希望所有错误都显示在“错误报告”仪表板中(https://console.cloud.google.com/errors?project=...)。 但是,那里只列出了一些错误。我不是 100% 确定哪些错误进入了错误报告仪表板,但我怀疑只有在有适当的错误堆栈跟踪的情况下,调用才会出现在错误仪表板中。logger.error

但这不是我想要的。我希望每当在我的应用程序中触发时,都应该在错误报告仪表板上创建一个错误组 - 无论我传递给的字符串是什么。 我该怎么做?logger.errorlogger.error

node.js google-cloud-platform winston google-cloud-error-reporting

评论


答:

1赞 sshevlyagin 10/25/2022 #1

我只是在java中处理这个问题,关键文档在格式要求中。

引用:

日志记录中包含堆栈跟踪或异常的日志条目,或者格式类似于 ReportedErrorEvent 的日志条目,会在错误报告中生成错误。

这是 java 库中的相关错误修复,当严重性为错误时,他们会向 json 日志消息对象添加一个值为 的字段。@typetype.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent

我不确定在温斯顿这样做的正确方法,但这就是你需要做的。

0赞 cis 11/2/2022 #2

看起来,在 Winston 中设置并不容易,但可以在消息中添加(一种人为的)堆栈跟踪,例如:@type

format: winston.format.combine(
    winston.format((info) => {
        if (info.level === 'error') {
            Object.assign(info, { message: `${info.message}${(new Error()).stack}` });
        }
        return info;
    })
...
)

这至少对我有用。