使用日志级别替换 Go App Engine "google.golang.org/appengine/log" 包?
Replacement for Go App Engine "google.golang.org/appengine/log" package, with log levels?
-
google-app-engine
-
google-cloud-platform
-
google-cloud-logging
-
google-app-engine-go
-
google-app-engine-golang
我注意到这个包已被弃用,根据此处的文档:https://cloud.google.com/appengine/docs/standard/go/go-differences
通过简单打印登录 Go 1.12+ 而不丢失日志级别的正确方法是什么? (DEBUG/INFO/WARNING/ERROR/CRITICAL/etc.)
您至少有 2 个解决方案:
- 使用cloud.google.com/go/logging
- 使用通用日志记录框架(如
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")
结果如下(注意正确的级别):
google-app-engine
google-cloud-platform
google-cloud-logging
google-app-engine-go
google-app-engine-golang
我注意到这个包已被弃用,根据此处的文档:https://cloud.google.com/appengine/docs/standard/go/go-differences
通过简单打印登录 Go 1.12+ 而不丢失日志级别的正确方法是什么? (DEBUG/INFO/WARNING/ERROR/CRITICAL/etc.)
您至少有 2 个解决方案:
- 使用cloud.google.com/go/logging
- 使用通用日志记录框架(如
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")
结果如下(注意正确的级别):