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

时间:2019-08-06 11:55:10

标签: go google-cloud-functions google-cloud-logging

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

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

link to image with logs

5 个答案:

答案 0 :(得分:0)

此处提供云支持!您无法尝试执行documentation中指定的操作:

  
      
  • 登录到 stdout stderr 的日志级别没有关联。

  •   
  • 内部系统消息的日志级别为 DEBUG

  •   

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

如果这对您不起作用,您可以尝试使用currently emits logsnode.jsgo级别,INFO代替ERROR,{ 1}}和console.log()

答案 1 :(得分:0)

您可以使用允许您设置日志级别的外部库。 Here我使用的示例。 使用logrus来设置最小日志级别(可以通过在env var中提供日志级别来改进此代码),并使用joonix来实现流畅的格式化程序。(第25行)

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

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

答案 2 :(得分:0)

欢迎您使用以下库: github.com/ncruces/go-gcf/logging

支持日志级别,还支持执行ID。

用法:

func HelloWorld(w http.ResponseWriter, r *http.Request) {
    ctx := logging.ForRequest(r)
    // ...
    logging.Info(ctx).Println("Hello logs")
    logging.Error(ctx).Println("Hello logs")
}

或者,对于后台功能:

func HelloBackground(ctx context.Context, m interface{}) error {
    logging.Info(ctx).Println("Hello logs")
    logging.Error(ctx).Println("Hello logs")
    return nil
}

完全公开:我是作者。 我已经在生产中使用了6个月。 反馈表示赞赏。

答案 3 :(得分:0)

我也为此创建了一个包。如果您使用对数(https://github.com/sirupsen/logrus),则可能会有所帮助:

https://github.com/tekkamanendless/gcfhook

我正在生产中使用它,并且效果很好。

答案 4 :(得分:0)

我推荐https://github.com/apsystole/log。它也是 log 和 logrus 兼容的,但是一个小的零依赖模块,这与两个现有答案中使用的库不同,这些库将 400 多个模块作为它们的依赖项(喘气......我只是在看{ {1}})。