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

Plain console.warn() shows up in logs with serverity "ERROR"

当我使用 console.warn() 记录某些内容时,它似乎出现在 Stackdriver 日志中,严重程度为 "ERROR"。 Stackdriver 错误报告没有显示这些错误,因此它们似乎不被视为错误。这使得无法过滤日志以仅向我显示错误。

阅读 Stackdriver 日志记录 docs 我的印象是我不应该使用普通的 javascript 控制台功能,而是使用 Bunyan。那是对的吗?我没有阅读任何我不应该阅读的地方。

如果您的日志显示在 Stackdriver Logging 中,那么错误报告至少能够看到它们。从那里开始,还有一些更多的要求取决于您使用的是什么(例如,如果您只是记录 JSON,它可能需要一个带有 serviceContext 的 reportLocation)。

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

另一方面,如果您只是想查看严重性 ERROR 日志,仅使用 severity=ERROR 日志记录中的高级过滤器可能会满足您的需求?

Cloud Functions 仅区分标准输出和标准错误。

Writing, Viewing, and Responding to Logs say that "Cloud Functions includes simple logging by default. Logs written to stdout or stderr will appear automatically". The logging docs page that you referenced mentions the same thing about stdout & stderr being automatic for Cloud Functions 上的文档。

我的解释是 console.warn() 将进入 stderr,一旦出现,warn 和 error 之间的区别就消失了。我怀疑您会看到 console.debug() 显示为 INFO。当使用 stderr 时,我在 VM 中有这种行为,但我认为 App Engine 没有这个问题。

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

错误报告对什么构成要捕获的 "error" 有一个特定的概念:https://cloud.google.com/error-reporting/docs/formatting-error-messages

我从 Google 支持了解到自节点 10 以来事情发生了变化(至少对于云功能)。节点 8 仍然正确记录 console.info 获取级别信息和 console.warn收到级别警告,这似乎符合我的经验。

在 firebase-functions 的最新版本中,您应该使用 logger library 来编写日志。对于 non-firebase 环境,您可以使用 @google-cloud/logging ,这看起来本质上是一样的。然后,您可以完全控制严重级别以及记录额外 JSON 有效负载作为第二个参数的能力。

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