为了账号安全,请及时绑定邮箱和手机立即绑定

Go中GCF的日志不包含日志级别

Go中GCF的日志不包含日志级别

Go
森栏 2023-07-10 15:08:49
我正在尝试从用 Go 编写的 Cloud Function 将信息/错误日志发送到 StackDriver Logging on GCP,但是所有日志都没有日志级别分配。我从https://github.com/GoogleCloudPlatform/golang-samples/blob/master/functions/helloworld/hello_logging.go创建了函数 来演示问题。
查看完整描述

5 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

您尝试做的事情是不可能的:

  • 输出到stdoutstderr 的日志没有关联的日志级别。

  • 内部系统消息具有DEBUG日志级别。

您可能需要的是使用Logging API,特别是Log Levels部分。

如果这对您不起作用,您可以尝试使用node.js代替,go因为它当前分别使用和向INFO和级别发出日志。ERRORconsole.log()console.error()


查看完整回答
反对 回复 2023-07-10
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

我创建了一个包来做到这一点: github.com/ncruces/go-gcp/glog

它适用于 App Engine、Kubernetes Engine、Cloud Run 和 Cloud Functions。支持设置日志记录级别、请求/跟踪元数据和结构化日志记录。

用法:

func HelloWorld(w http.ResponseWriter, r *http.Request) {

    glog.Infoln("Hello logs")

    glog.Errorln("Hello logs")

    // or, to set request metadata:

    logger := glog.ForRequest(r)

    logger.Infoln("Hello logs")

}


查看完整回答
反对 回复 2023-07-10
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您可以使用允许您设置日志级别的外部库。使用 logrus 设置最小日志级别(您可以通过在环境变量中提供日志级别来改进此代码),并使用 joonix 来设置 fluidd 格式化程序。(第 25 行)

一个注意点。第11行,我将logrus包重命名为log log "github.com/sirupsen/logrus" 因此,不使用log标准库,而是使用logrus库。有时很无聊......您可以简单地用 logrus 替换 log 以避免所有混乱。

Joonix 是一个 FluentD 格式化程序,用于将日志转换为 Stackdriver 可摄取的格式。


查看完整回答
反对 回复 2023-07-10
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我也尝试为此创建一个包。如果您使用 logrus ( https://github.com/sirupsen/logrus ),那么这可能会有所帮助:

https://github.com/tekkamanendless/gcfhook

我在生产中使用它,并且运行得很好。


查看完整回答
反对 回复 2023-07-10
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我推荐https://github.com/apsystole/log。它也与 log 和 logrus 兼容,但它是一个小型的零依赖模块,与两个现有答案中使用的库不同,后者将 400 多个模块作为其依赖项(喘息......我只是在看go mod graph)。



查看完整回答
反对 回复 2023-07-10
  • 5 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信