我们的开发人员创建了一个内部 Java 应用程序,用于log4j
格式化其日志消息。最近,我们开始在 Google Kubernetes Engine 上运行它,因此日志会自动从 stdout 传输到 Stackdriver。但是,所有日志都显示严重性级别INFO
。其中一条消息有一个 textPayload,其开头如下:
18 Jul 2019 10:11:32.334 [ERROR] [req=api-test--870259294-18071111-11 sess=cwfscqttcfqh1acsictx3toxv reqMs=4]
显然,开发人员的意图是这是一个ERROR
严重性消息,但由于他们在构建应用程序时没有考虑 Stackdriver,因此它是非结构化的并被报告为INFO
严重性消息。
必须更改应用程序以遵守我们使用的集中式日志记录,这感觉不对;我们的客户可能会使用其他日志记录解决方案。有没有办法让 Stackdriver 使用 textPayload 来确定严重性?我在 Google Kubernetes Engine 上运行,所以我没有设置任何日志记录基础设施,也没有对 Google 提供的内容以外的任何访问权限。
我之所以想要进行此更改,是因为 Google Cloud Platform 的错误报告功能是跟踪错误消息的强大工具,但它仅适用于严重程度为ERROR
或更高的日志。简单地在 Stackdriver 中创建日志指标并不能给我带来我想要的控制。
答案1
简单的回答是“不”,您需要更改代码并实现正确的日志记录,并为每条消息设置正确的严重性。您可以将 Stackdriver 日志导出到 BigQuery,这是很正常的,然后运行更复杂的查询。
您可以在这里找到一些有用的链接: