【问题标题】:Replacement for Go App Engine "google.golang.org/appengine/log" package, with log levels?用日志级别替换 Go App Engine“google.golang.org/appengine/log”包?
【发布时间】:2021-08-05 19:57:14
【问题描述】:

我注意到这个包已被弃用,根据这里的文档:https://cloud.google.com/appengine/docs/standard/go/go-differences

通过简单的打印不丢失日志级别登录 Go 1.12+ 的正确方法是什么? (DEBUG/INFO/WARNING/ERROR/CRITICAL/etc.)

【问题讨论】:

    标签: google-app-engine google-cloud-platform google-cloud-logging google-app-engine-go google-app-engine-golang


    【解决方案1】:

    您至少有 2 个解决方案:

    1. 使用cloud.google.com/go/logging
    2. 使用通用日志框架(如 logrus)和特殊的 Stackdriver 适配器在 Stackdriver 日志中获得具有正确格式和正确级别的日志

    使用 cloud.google.com/go/logging

    这是我认为的默认解决方案:

    import "cloud.google.com/go/logging"
    
    ctx := context.Background()
    client, err := logging.NewClient(ctx, "my-project")
    
    logger := client.Logger("my-log")
    logger.Log(logging.Entry{Payload: "something happened!", Severity: logging.Info})
    

    但是每次你想记录一些东西时创建一个Entry 对象可能很乏味。如果你只想写log.Debuglog.Info,当然你可以创建函数logDebuglogInfo等,但你也可以使用另一种解决方案(基于logrus)。

    使用 logrus 和 Stackdriver 适配器

    正如我所说,您可以使用 logrus),这对于登录 Go 项目非常常见。但是你需要做一个小的修改,将默认的文本日志转换为 Stackdriver 可以理解的日志条目格式。

    import (
            log "github.com/sirupsen/logrus"
            stackdriver "github.com/TV4/logrus-stackdriver-formatter" // adapter
    )
    
    log.SetFormatter(stackdriver.NewFormatter())
    log.SetLevel(log.DebugLevel) // default is Info
    
    log.Debug("This is debug")
    log.Info("This is info")
    log.Error("This is error")
    log.Warn("This is warn")
    

    结果如下(注意正确的级别):

    【讨论】:

    • 谢谢!是否预计 context.Background() 将在 1.12+ 运行时上的多个请求中存活下来,即使对于 App Engine 标准也是如此?
    • 很抱歉,我无法在这一点上为您提供帮助:/
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2019-12-13
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多