如何使用记录器将错误记录到堆栈驱动程序中?

Posted

技术标签:

【中文标题】如何使用记录器将错误记录到堆栈驱动程序中?【英文标题】:How to use logger to log an error into stackdriver? 【发布时间】:2017-08-19 22:14:54 【问题描述】:

我有一个在谷歌计算云上运行的 VM 微实例,我想将错误消息记录到 stackdriver。这个页面https://cloud.google.com/logging/docs/agent/installation显示了这个例子

logger "Some test message"

这对于普通消息非常有用,但我希望 stackdriver 将某些消息识别为错误,以便它们会显示在这里 https://console.cloud.google.com/errors,这样我就可以收到电子邮件通知。

我知道gcloud 工具有一个测试版日志记录解决方案,但我希望避免安装它需要的额外组件。

【问题讨论】:

【参考方案1】:

您需要在https://cloud.google.com/error-reporting/docs/formatting-error-messages 阅读有关格式化的文档

类似:

  
   "message": "Some test message",
   "context": 
     "reportLocation": 
       "functionName": "my_function"
    
   ,
   "serviceContext": 
     "service": "my service",
   
  

您需要将消息作为日志条目的jsonPayload,而不是textPayload。我相信代理会自动识别 JSON 消息,但如果还有非 JSON 消息,它可能会在所有情况下都使用文本。在这种情况下,使用专用日志记录错误应该会有所帮助。

您可能还对有关消息如何组合在一起的文档感兴趣:https://cloud.google.com/error-reporting/docs/grouping

【讨论】:

感谢您的回答。我已经用logger "$json"(在shell中)尝试了你的例子,它出现在stackdriver中,但没有出现在错误报告器中。我也尝试过同样的事情,但用\n 替换新行就像json='\n "message": "Some test message",\n "context": \n "reportLocation": \n "functionName": "my_function"\n \n ,\n "serviceContext": \n "service": "my service",\n \n ' 在云控制台日志查看器中展开日志条目时,(json, text, proto)中的内容是什么payload类型? 我认为这只是文字,但这里是回复gist.github.com/bijoutrouvaille/… textPayload 是诀窍。看起来代理没有完全解析系统日志条目。如果消息是例如在一个文件中,我怀疑它会更好。您打算长期使用logger 生成消息吗? 如果可能的话,我想避免安装额外的组件,尤其是那些需要手动配置的组件。

以上是关于如何使用记录器将错误记录到堆栈驱动程序中?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ELK 堆栈进行应用程序日志记录

从另一个用户记录堆栈跟踪错误:不幸的是,应用程序已停止

如何从像 Asp.Net 这样的堆栈跟踪中获取“源错误”?

如何使用脚本或代码将错误动态记录到 JIRA

使用 pl/sql 过程记录错误和处理异常

如何记录存储过程错误