我正在使用 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")
任何以惯用方式执行此操作的帮助表示赞赏