我有一个ctx(context.Context)变量,其值为:
ctx = context.Background.WithCancel.WithCancel.WithValue(peer.peerKey{}, &peer.Peer{Addr:(*net.UnixAddr)
(0xc000270820), AuthInfo:credentials.AuthInfo(nil)}).WithValue(metadata.mdIncomingKey{},
metadata.MD{":authority":[]string{"unix:///run/containerd/containerd.sock"}, "content-type":
[]string{"application/grpc"}, "user-agent":[]string{"grpc-go/1.12.0"},
"containerd-lease":[]string{"615343279-BvIN"}, "containerd-namespace":
[]string{"default"}}).WithValue(grpc.streamKey{}, <stream: 0xc00026af00,
/containerd.services.content.v1.Content/Write>).WithValue(log.loggerKey{},
&logrus.Entry{Logger:(*logrus.Logger)(0xc0000b0180),
Data:logrus.Fields{"ref":"config-
sha256:bc8fb6e6e49dac415b320f3ce41fa4f6335a4526fccd4e97c64bcbdfca280ba5",
"total":1512,
"expected":"sha256:bc8fb6e6e49dac415b320f3ce41fa4f6335a4526fccd4e97c64bcbdf
ca280ba5"}, Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)},
Level:0x0, Caller:(*runtime.Frame)(nil), Message:"", Buffer:(*bytes.Buffer)
(nil), err:""})
如您在此处看到的,这里有一个Data字段和其他一些值。我想在“数据”字段中提取ref
值和expected
值。我尝试用Value()
字段将它们淘汰,但我总是得到零。知道如何才能获得这些价值吗?据我了解,loggerKey{}
是这里的关键,所以我也尝试使用loggerKey{}
提取数据,但是它仍然表明该接口无效。
logger := ctx.Value(loggerKey{}).(*logrus.Entry)
打印记录器抛出错误:
panic: interface conversion: interface {} is nil, not *logrus.Entry
不确定,为什么界面在这里为零。 TIA。
答案 0 :(得分:0)
弄清楚了。我使用loggerKey {}作为键,而实际的键是log.loggerKey {}。我必须导入日志,然后它才能工作。