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

我正在尝试从用 Go 编写的 Cloud Function 将信息/错误日志发送到 StackDriver Logging on GCP,但是所有日志都没有日志级别分配。

我从https://github.com/GoogleCloudPlatform/golang-samples/blob/master/functions/helloworld/hello_logging.go创建了函数 来演示问题。

http://img.mukewang.com/64abaebd000116a713260142.jpg

森栏
浏览 159回答 5
5回答

汪汪一只猫

您尝试做的事情是不可能的:输出到stdout或stderr 的日志没有关联的日志级别。内部系统消息具有DEBUG日志级别。您可能需要的是使用Logging API,特别是Log Levels部分。如果这对您不起作用,您可以尝试使用node.js代替,go因为它当前分别使用和向INFO和级别发出日志。ERRORconsole.log()console.error()

翻过高山走不出你

我创建了一个包来做到这一点: 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")}

芜湖不芜

您可以使用允许您设置日志级别的外部库。使用 logrus 设置最小日志级别(您可以通过在环境变量中提供日志级别来改进此代码),并使用 joonix 来设置 fluidd 格式化程序。(第 25 行)一个注意点。第11行,我将logrus包重命名为log log "github.com/sirupsen/logrus" 因此,不使用log标准库,而是使用logrus库。有时很无聊......您可以简单地用 logrus 替换 log 以避免所有混乱。Joonix 是一个 FluentD 格式化程序,用于将日志转换为 Stackdriver 可摄取的格式。

海绵宝宝撒

我也尝试为此创建一个包。如果您使用 logrus ( https://github.com/sirupsen/logrus ),那么这可能会有所帮助:https://github.com/tekkamanendless/gcfhook我在生产中使用它,并且运行得很好。

一只甜甜圈

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

相关分类

Go