From 2ec4325d4a859636391ccc3ec685b5447bc2e644 Mon Sep 17 00:00:00 2001 From: "yinxuran.lucky" Date: Mon, 24 Apr 2023 12:47:33 +0800 Subject: [PATCH] feat: support silentmode to mute log --- pkg/app/server/hertz_test.go | 41 ++++++++++++++++++++++++++++++++++++ pkg/common/hlog/system.go | 14 ++++++++++++ 2 files changed, 55 insertions(+) diff --git a/pkg/app/server/hertz_test.go b/pkg/app/server/hertz_test.go index aef7824ab..b9a07fbce 100644 --- a/pkg/app/server/hertz_test.go +++ b/pkg/app/server/hertz_test.go @@ -37,6 +37,7 @@ import ( "github.com/cloudwego/hertz/pkg/app/server/registry" "github.com/cloudwego/hertz/pkg/common/config" errs "github.com/cloudwego/hertz/pkg/common/errors" + "github.com/cloudwego/hertz/pkg/common/hlog" "github.com/cloudwego/hertz/pkg/common/test/assert" "github.com/cloudwego/hertz/pkg/common/test/mock" "github.com/cloudwego/hertz/pkg/common/utils" @@ -740,3 +741,43 @@ func TestOnprepare(t *testing.T) { time.Sleep(time.Second) c.Get(context.Background(), nil, "http://127.0.0.1:9231/ping") } + +type lockBuffer struct { + sync.Mutex + b bytes.Buffer +} + +func (l *lockBuffer) Write(p []byte) (int, error) { + l.Lock() + defer l.Unlock() + return l.b.Write(p) +} + +func (l *lockBuffer) String() string { + l.Lock() + defer l.Unlock() + return l.b.String() +} + +func TestSilentMode(t *testing.T) { + hlog.SetSilentMode(true) + b := &lockBuffer{b: bytes.Buffer{}} + + hlog.SetOutput(b) + + h := New(WithHostPorts("localhost:9232"), WithTransport(standard.NewTransporter)) + h.GET("/ping", func(c context.Context, ctx *app.RequestContext) { + ctx.Write([]byte("hello, world")) + }) + go h.Spin() + time.Sleep(time.Second) + + d := standard.NewDialer() + conn, _ := d.DialConnection("tcp", "127.0.0.1:9232", 0, nil) + conn.Write([]byte("aaa")) + conn.Close() + + if strings.Contains(b.String(), "Error") { + t.Fatalf("unexpected error in log: %s", b.String()) + } +} diff --git a/pkg/common/hlog/system.go b/pkg/common/hlog/system.go index cb8a1453c..fc1ff171f 100644 --- a/pkg/common/hlog/system.go +++ b/pkg/common/hlog/system.go @@ -23,6 +23,17 @@ import ( "sync" ) +const muteError = "Error=%s, remoteAddr=%s" + +var silentMode = false + +// SetSilentMode is used to mute engine error log, +// for example: error when reading request headers. +// If true, hertz engine will mute it. +func SetSilentMode(s bool) { + silentMode = s +} + var builderPool = sync.Pool{New: func() interface{} { return &strings.Builder{} // nolint:SA6002 }} @@ -80,6 +91,9 @@ func (ll *systemLogger) Fatalf(format string, v ...interface{}) { } func (ll *systemLogger) Errorf(format string, v ...interface{}) { + if silentMode && format == muteError { + return + } ll.logger.Errorf(ll.addPrefix(format), v...) }