普通console.warn()出现在具有服务器错误“ ERROR”的日志中

时间:2019-04-19 10:06:31

标签: gcloud google-cloud-stackdriver

当我用console.warn()记录某些内容时,它似乎以严重程度为“ ERROR”出现在Stackdriver日志中。 Stackdriver Error Reporting不显示这些错误,因此似乎它们不被视为错误。这样就无法过滤日志以仅向我显示错误。

阅读Stackdriver日志docs,我得到的印象是我不应该使用普通的JavaScript控制台功能,而应该使用Bunyan。那是对的吗?我没看过我不应该去的地方。

3 个答案:

答案 0 :(得分:1)

此后,我从Google支持部门了解到,自节点10开始,事情发生了变化(至少对于云功能而言)。Node8仍正确记录了console.info获取级别信息和console.warn获取级别警告,并且似乎与我的经验。

在最新版本的firebase函数中,应使用logger library来编写日志。对于非Firebase环境,您可以使用@ google-cloud / logging,这似乎基本上是相同的。然后,您可以完全控制严重性级别,并且可以记录额外的JSON有效负载作为第二个参数。

换句话说,不要使用本机Javascript控制台方法。

答案 1 :(得分:0)

如果您的日志显示在Stackdriver Logging中,则Error Reporting至少能够看到它们。从那里开始,还有更多的需求完全取决于您所使用的内容(例如,如果您仅记录JSON,则可能需要带有serviceContext的reportLocation)。

这可能有用:https://cloud.google.com/error-reporting/docs/formatting-error-messages

另一方面,如果您只是想查看严重性错误日志,那么仅使用Logging for severity=ERROR中的高级过滤器就可以满足您的需求?

答案 2 :(得分:0)

Cloud Functions仅区分stdout和stderr。

Writing, Viewing, and Responding to Logs上的文档说:“ Cloud Functions默认包含简单的日志记录。写入stdout或stderr的日志将自动出现”。您引用的日志记录文档页面提到了与stdout & stderr being automatic for Cloud Functions相同的内容。

我的解释是console.warn()将进入stderr,并且一旦警告和错误之间的区别就会消失。我怀疑您会看到console.debug()显示为INFO的情况。使用stderr时,我在虚拟机中有这种行为,但是我认为App Engine没有此问题。

我认为日志记录文档页面没有具体建议Bunyan。它以类似的方式处理Winston以及客户端库(在这种情况下,身份验证应该可以正常工作)。

错误报告对要捕获的“错误”具有特定的概念:https://cloud.google.com/error-reporting/docs/formatting-error-messages