mirror of
https://github.com/zeromicro/go-zero.git
synced 2025-02-02 16:28:39 +08:00
fix: redis's pipeline logs are not printed completely (#2538)
* fix: redis's pipeline logs are not printed completely * add unit test Signed-off-by: liaoshiwei <liaoshiwei@uniontech.com> Signed-off-by: liaoshiwei <liaoshiwei@uniontech.com>
This commit is contained in:
parent
7c9ef3ca67
commit
b21162d638
@ -56,7 +56,7 @@ func (h hook) AfterProcess(ctx context.Context, cmd red.Cmder) error {
|
||||
|
||||
duration := timex.Since(start)
|
||||
if duration > slowThreshold.Load() {
|
||||
logDuration(ctx, cmd, duration)
|
||||
logDuration(ctx, []red.Cmder{cmd}, duration)
|
||||
}
|
||||
|
||||
metricReqDur.Observe(int64(duration/time.Millisecond), cmd.Name())
|
||||
@ -103,7 +103,7 @@ func (h hook) AfterProcessPipeline(ctx context.Context, cmds []red.Cmder) error
|
||||
|
||||
duration := timex.Since(start)
|
||||
if duration > slowThreshold.Load()*time.Duration(len(cmds)) {
|
||||
logDuration(ctx, cmds[0], duration)
|
||||
logDuration(ctx, cmds, duration)
|
||||
}
|
||||
|
||||
metricReqDur.Observe(int64(duration/time.Millisecond), "Pipeline")
|
||||
@ -136,13 +136,20 @@ func formatError(err error) string {
|
||||
}
|
||||
}
|
||||
|
||||
func logDuration(ctx context.Context, cmd red.Cmder, duration time.Duration) {
|
||||
func logDuration(ctx context.Context, cmds []red.Cmder, duration time.Duration) {
|
||||
var buf strings.Builder
|
||||
for i, arg := range cmd.Args() {
|
||||
if i > 0 {
|
||||
buf.WriteByte(' ')
|
||||
for k, cmd := range cmds {
|
||||
if k > 0 {
|
||||
buf.WriteByte('\n')
|
||||
}
|
||||
buf.WriteString(mapping.Repr(arg))
|
||||
var build strings.Builder
|
||||
for i, arg := range cmd.Args() {
|
||||
if i > 0 {
|
||||
build.WriteByte(' ')
|
||||
}
|
||||
build.WriteString(mapping.Repr(arg))
|
||||
}
|
||||
buf.WriteString(mapping.Repr(build.String()))
|
||||
}
|
||||
logx.WithContext(ctx).WithDuration(duration).Slowf("[REDIS] slowcall on executing: %s", buf.String())
|
||||
}
|
||||
|
@ -163,6 +163,17 @@ func TestHookProcessPipelineCase5(t *testing.T) {
|
||||
assert.True(t, buf.Len() == 0)
|
||||
}
|
||||
|
||||
func TestLogDuration(t *testing.T) {
|
||||
w, restore := injectLog()
|
||||
defer restore()
|
||||
|
||||
logDuration(context.Background(), []red.Cmder{red.NewCmd(context.Background(), "get", "foo")}, 1*time.Second)
|
||||
assert.True(t, strings.Contains(w.String(), "get foo"))
|
||||
|
||||
logDuration(context.Background(), []red.Cmder{red.NewCmd(context.Background(), "get", "foo"), red.NewCmd(context.Background(), "set", "bar", 0)}, 1*time.Second)
|
||||
assert.True(t, strings.Contains(w.String(), "get foo\\nset bar 0"))
|
||||
}
|
||||
|
||||
func injectLog() (r *strings.Builder, restore func()) {
|
||||
var buf strings.Builder
|
||||
w := logx.NewWriter(&buf)
|
||||
|
Loading…
Reference in New Issue
Block a user