0

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

在不丢失日志级别的情况下通过简单的打印登录Go 1.12+ 的正确方法是什么?(调试/信息/警告/错误/关键/等)

4

1 回答 1

2

您至少有 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.Debug, log.Info,当然你可以创建函数logDebug,logInfo等,但你也可以使用其他解决方案(基于 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")

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

Stackdriver 日志

于 2021-05-16T14:43:32.450 回答