0

我正在使用 Operator SDK 为 Kubernetes 编写一个 Operator,并且有一个关于日志记录的问题(我对 Go 还是很陌生)。

我在我的控制器中设置了一个记录器,我已将 UUID 作为跟踪 ID 附加到

func (r *MyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
    myLog = log.FromContext(ctx).WithValues("traceID", uuid.NewUUID())
    myCtx := log.IntoContext(ctx, myLog)

但是,我有一个与控制器同时设置并通过结构传入的库。

type MyReconciler struct {
    MyBase
    MyClient MyGreatClient
}

并且客户端上的每个方法都以 ctx 作为参数。

由于我想在 ctx 中使用记录器,因为它包含我的跟踪 ID,我需要将此行添加到客户端中的每个方法中,还是有更好的方法?

func (mgc *MyGreatClient) SomethingExists(ctx context.Context, something string) bool {
    myGreatClientLog = log.FromContext(ctx).WithName("MyGreatClient")
    myGreatClientLog.Info("Checking Something Exists", "Something", something)

有没有更好的方法来实现我想做的事情?"sigs.k8s.io/controller-runtime/pkg/log"(类型)似乎不logr.Logger支持只记录像 zap 这样的上下文。

 myappcontex.Logger(ctx).Info("did something awesome")

任何以惯用方式执行此操作的帮助表示赞赏

4

0 回答 0