日志使用

概述

logc 和 logx 是 go-zero 的日志库,我们可以轻松实现日志的打印的能力。

任务目标

  1. 了解 github.com/zeromicro/go-zero/core/logc 包的使用。

简单的日志打印

  1. logc.Info(context.Background(), "hello world")
  2. // {"@timestamp":"2023-04-22T20:35:42.681+08:00","caller":"inherit/main.go:40","content":"hello world","level":"info"}

我们直接使用 logc 进行 info 的日志打印,其中 logc,是需要带上 conext 的,我们会将 ctx 中的 traceID 等信息也打印出来。

输出日志到文件

  1. package main
  2. import (
  3. "context"
  4. "github.com/zeromicro/go-zero/core/conf"
  5. "github.com/zeromicro/go-zero/core/logc"
  6. "github.com/zeromicro/go-zero/core/logx"
  7. )
  8. func main() {
  9. var cfg logx.LogConf
  10. _ = conf.FillDefault(&cfg)
  11. cfg.Mode = "file"
  12. logc.MustSetup(cfg)
  13. defer logc.Close()
  14. logc.Info(context.Background(), "hello world")
  15. }

这样我们就可以在当前的路径下面看到 logs 文件夹,里面就有我们的所有日志文件。 当然你也可以使用 cfg.Path = “/tmp/logs” 修改日志的路径。

日志中带上额外信息

  1. logc.Infow(context.Background(), "hello world", logc.Field("key", "value"))
  2. // {"@timestamp":"2023-04-22T20:48:12.516+08:00","caller":"inherit/main.go:11","content":"hello world","key":"value","level":"info"}

我们可以通过 logc.Filed 对我们的日志进行扩展。

日志带上自定义的key

我们可以在所有的日志上面带上一些默认的 key和value,例如:我们希望在 api 所有链路上面都带上 路由信息,我们可以将信息注入到ctx中,这样后面的方法在打印的时候就会自动带上 kv 信息。 例如:

  1. ctx := logx.ContextWithFields(context.Background(), logx.Field("path", "/user/info"))
  2. logc.Infow(ctx, "hello world")
  3. logc.Error(ctx, "error log")
  4. // {"@timestamp":"2023-04-22T20:53:00.593+08:00","caller":"inherit/main.go:13","content":"hello world","level":"info","path":"/user/info"}
  5. // {"@timestamp":"2023-04-22T20:53:00.593+08:00","caller":"inherit/main.go:14","content":"error log","level":"error","path":"/user/info"}