GAE node.js console.error()未记录为错误日志级别

时间:2019-01-11 17:47:09

标签: javascript node.js google-app-engine logging stackdriver

  • google app-engine标准
  • 运行时:nodejs10

我不确定如何弄乱它,因为它看起来是如此简单。根据{{​​3}}:

console.error('message');

在Stackdriver Logs Viewer中应该具有 ERROR 日志级别。但是,我看到日志级别设置为“任何日志级别”。从stderr看,似乎正确的是它正在登录到logName

logName:  "projects/my-project-name/logs/stderr"  

引用:

  

要从您的Node.js应用发出日志项,您可以使用   console.log()console.error()函数,它们具有   以下日志级别:

     
      
  • console.log()发出的物品具有 INFO 日志级别。
  •   
  • console.error()发出的物品具有 ERROR 日志级别。
  •   
  • 内部系统消息具有 DEBUG 日志级别。
  •   

我本来是想让winston与Stackdriver一起工作(使用app engine standard documentation)来获得更详细的日志记录级别,但是现在我什至无法将其记录在 INFO ERROR (带有基本的console.log()console.error())。

希望我不必只使用普通的console.error()就写一个@google-cloud/logging-winston

3 个答案:

答案 0 :(得分:1)

尝试了几个小时后,我开始工作了。 我根据文档https://cloud.google.com/logging/docs/setup/nodejs#using_winston使用了Winston。

然后在stackdriver Log Viewer中,我从下拉菜单中选择了winston_log,如下所示: enter image description here

现在显示错误日志。

这也适用于Bunyan。您必须为Bunyan选择bunyan_log

希望这对某人有帮助:)

答案 1 :(得分:1)

tl; dr -不支持。

更长的答案

因此,自从我发布问题以来,似乎Google已更新了其文档。他们澄清说,已经收集了对stdoutstderr的写操作,但是:

  

不提供日志级别,可用于在“日志查看器”中进行过滤

我很高兴回答一个问题,那就是:“不,console.log()console.error()将没有日志级别。”这种与下一段矛盾。我可能对文档有误读或误解,因此请在这种情况下发表评论。

我拍摄了文档的屏幕快照,指出了我指的是什么,以防他们再次更新它: Google App Engine Documentation on Logging

解决方案

将Google支持的一种日志库与Stackdriver日志传输一起使用,例如@ darshan-devrai的答案。如果您不想更改所有console.log()console.error()等,则只需将控制台记录器别名为您选择的记录器(类似于此stackoverflow answer)。

答案 2 :(得分:0)

文档 herehere 在记录 console.error 的方式方面似乎存在冲突。

就我而言,打印一个简单的对象效果很好:

let gcloudError = {
        severity: 'ERROR',
        message: 'Error in country ' + country + ' ' + JSON.stringify(err.message)
      }
console.error(JSON.stringify(gcloudError));

这将显示为: Error on log dashboard