-1

你好我想使用zap全局记录器

现在我正在这样使用

        zap.L().Error("error receive",
            zap.Error(err),
            zap.String("uuid", msg.Id)
            zap.String("msg_f", msg_f),
        )

但唯一的问题是由于 uuid 和 msg 的类型而出现错误

type Message struct {
    Id   uuid.UUID
}

并且 msg_f 类型是 []byte 我的问题是如何打印它们,但我不知道应该使用什么

4

1 回答 1

2

的定义zap.String是:

func String(key string, val string) Field

所以第二个参数是 a string; a UUID/ []byteis not astring所以不能按原样使用。这使您有两个选择:

  • 将a 传递stringzap.String(将您拥有的内容转换为 a string)或;
  • 使用接受您要记录的类型的函数。

zap 提供了许多函数,这些函数返回其中的Field一些接受[]byte(例如Binary,并且ByteString.zap 还提供了Stringer可以与实现fmt.Stringer接口的任何类型一起使用的函数(UUID确实如此)。

下面(操场)演示:

zap.L().Error("error receive",
        zap.Error(err),
        zap.String("uuid", msg.Id.String()),
        zap.Stringer("uuid2", msg.Id),
        zap.ByteString("msg_f", msg_f),
        zap.Binary("msg_f2", msg_f),
        zap.String("msg_f3", string(msg_f)),
    )
于 2021-12-10T00:31:06.673 回答