diff --git a/zrpc/client.go b/zrpc/client.go index 5240a4790595..7fe631281bdb 100644 --- a/zrpc/client.go +++ b/zrpc/client.go @@ -90,6 +90,11 @@ func (rc *RpcClient) Conn() *grpc.ClientConn { return rc.client.Conn() } +// DontLogClientContentForMethod disable logging content for given method. +func DontLogClientContentForMethod(method string) { + clientinterceptors.DontLogContentForMethod(method) +} + // SetClientSlowThreshold sets the slow threshold on client side. func SetClientSlowThreshold(threshold time.Duration) { clientinterceptors.SetSlowThreshold(threshold) diff --git a/zrpc/client_test.go b/zrpc/client_test.go index 9b1319024c2b..80fb39e9b365 100644 --- a/zrpc/client_test.go +++ b/zrpc/client_test.go @@ -125,6 +125,7 @@ func TestDepositServer_Deposit(t *testing.T) { tarConfClient, targetClient, } + DontLogClientContentForMethod("foo") SetClientSlowThreshold(time.Second) for _, tt := range tests { diff --git a/zrpc/internal/clientinterceptors/durationinterceptor.go b/zrpc/internal/clientinterceptors/durationinterceptor.go index 3f65a8bf5a5e..eac73af55a5f 100644 --- a/zrpc/internal/clientinterceptors/durationinterceptor.go +++ b/zrpc/internal/clientinterceptors/durationinterceptor.go @@ -3,8 +3,10 @@ package clientinterceptors import ( "context" "path" + "sync" "time" + "github.com/zeromicro/go-zero/core/lang" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/syncx" "github.com/zeromicro/go-zero/core/timex" @@ -13,7 +15,10 @@ import ( const defaultSlowThreshold = time.Millisecond * 500 -var slowThreshold = syncx.ForAtomicDuration(defaultSlowThreshold) +var ( + notLoggingContentMethods sync.Map + slowThreshold = syncx.ForAtomicDuration(defaultSlowThreshold) +) // DurationInterceptor is an interceptor that logs the processing time. func DurationInterceptor(ctx context.Context, method string, req, reply interface{}, @@ -22,19 +27,34 @@ func DurationInterceptor(ctx context.Context, method string, req, reply interfac start := timex.Now() err := invoker(ctx, method, req, reply, cc, opts...) if err != nil { - logx.WithContext(ctx).WithDuration(timex.Since(start)).Errorf("fail - %s - %v - %s", - serverName, req, err.Error()) + logger := logx.WithContext(ctx).WithDuration(timex.Since(start)) + _, ok := notLoggingContentMethods.Load(method) + if ok { + logger.Errorf("fail - %s - %s", serverName, err.Error()) + } else { + logger.Errorf("fail - %s - %v - %s", serverName, req, err.Error()) + } } else { elapsed := timex.Since(start) if elapsed > slowThreshold.Load() { - logx.WithContext(ctx).WithDuration(elapsed).Slowf("[RPC] ok - slowcall - %s - %v - %v", - serverName, req, reply) + logger := logx.WithContext(ctx).WithDuration(elapsed) + _, ok := notLoggingContentMethods.Load(method) + if ok { + logger.Slowf("[RPC] ok - slowcall - %s", serverName) + } else { + logger.Slowf("[RPC] ok - slowcall - %s - %v - %v", serverName, req, reply) + } } } return err } +// DontLogContentForMethod disable logging content for given method. +func DontLogContentForMethod(method string) { + notLoggingContentMethods.Store(method, lang.Placeholder) +} + // SetSlowThreshold sets the slow threshold. func SetSlowThreshold(threshold time.Duration) { slowThreshold.Set(threshold) diff --git a/zrpc/internal/clientinterceptors/durationinterceptor_test.go b/zrpc/internal/clientinterceptors/durationinterceptor_test.go index 9acd0efbe4b0..844a7a6d78ea 100644 --- a/zrpc/internal/clientinterceptors/durationinterceptor_test.go +++ b/zrpc/internal/clientinterceptors/durationinterceptor_test.go @@ -24,6 +24,7 @@ func TestDurationInterceptor(t *testing.T) { err: errors.New("mock"), }, } + DontLogContentForMethod("/foo") for _, test := range tests { t.Run(test.name, func(t *testing.T) { cc := new(grpc.ClientConn)