From 4799e4bfd390ba939ab0dc95d4bddccc71192a7f Mon Sep 17 00:00:00 2001 From: Inhere Date: Fri, 30 Dec 2022 12:56:24 +0800 Subject: [PATCH] :necktie: up: update log write logic, add more unit tests --- any.go | 7 ------- issues_test.go | 2 +- logger.go | 2 +- logger_test.go | 24 ++++++++++++++++++++++++ processor_test.go | 2 +- record.go | 8 ++++++-- rotatefile/any.go | 7 ------- sugared.go | 3 +-- write.go | 29 ++++++++++++++--------------- 9 files changed, 48 insertions(+), 36 deletions(-) delete mode 100644 any.go delete mode 100644 rotatefile/any.go diff --git a/any.go b/any.go deleted file mode 100644 index cefb871..0000000 --- a/any.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build !go1.18 -// +build !go1.18 - -package slog - -// alias of interface{}, use for go < 1.18 -type any = interface{} diff --git a/issues_test.go b/issues_test.go index 63949e6..a3a6c6b 100644 --- a/issues_test.go +++ b/issues_test.go @@ -36,7 +36,7 @@ func TestIssues_31(t *testing.T) { h2 := handler.MustFileHandler("testdata/info_issue31.log", handler.WithLogLevels(infoLevels)) slog.PushHandler(h1) - slog.PushHandler(h2) + slog.PushHandlers(h2) // add logs slog.Info("info message text") diff --git a/logger.go b/logger.go index 5f80ce9..3df2c46 100644 --- a/logger.go +++ b/logger.go @@ -81,7 +81,7 @@ func NewWithName(name string) *Logger { exitHandlers: []func(){}, // options ReportCaller: true, - CallerSkip: 7, + CallerSkip: 6, TimeClock: DefaultClockFn, } diff --git a/logger_test.go b/logger_test.go index e5f2c81..71678a2 100644 --- a/logger_test.go +++ b/logger_test.go @@ -2,6 +2,7 @@ package slog_test import ( "bytes" + "context" "errors" "testing" @@ -82,6 +83,22 @@ func TestLogger_Log(t *testing.T) { l.WithTime(timex.NowHourStart()).Panicln("a panic message") } +func TestLogger_WithContext(t *testing.T) { + var buf bytes.Buffer + h := handler.NewIOWriterHandler(&buf, slog.AllLevels) + + l := newLogger() + l.AddHandlers(h) + + ctx := context.Background() + + r := l.WithCtx(ctx) + r.Info("with context") + + str := buf.String() + assert.Contains(t, str, `with context`) +} + func TestLogger_panic(t *testing.T) { h := newTestHandler() h.errOnFlush = true @@ -160,6 +177,13 @@ func TestLogger_logf_allLevel(t *testing.T) { printfAllLevelLogs(l, "this a log %s", "message") } +func newLogger() *slog.Logger { + return slog.NewWithConfig(func(l *slog.Logger) { + l.ReportCaller = true + l.DoNothingOnPanicFatal() + }) +} + func printAllLevelLogs(l gsr.Logger, args ...interface{}) { l.Debug(args...) l.Info(args...) diff --git a/processor_test.go b/processor_test.go index a77a49b..83f946b 100644 --- a/processor_test.go +++ b/processor_test.go @@ -37,7 +37,7 @@ func TestLogger_AddProcessor(t *testing.T) { assert.Contains(t, str, `"memoryUsage":`) l.ResetProcessors() - l.PushProcessor(slog.AddUniqueID("requestId")) + l.SetProcessors([]slog.Processor{slog.AddUniqueID("requestId")}) l.Info("message3") str = buf.String() buf.Reset() diff --git a/record.go b/record.go index c7b5786..eb849a2 100644 --- a/record.go +++ b/record.go @@ -293,15 +293,19 @@ func (r *Record) SetFields(fields M) *Record { // func (r *Record) log(level Level, args []any) { + r.Level = level // will reduce memory allocation once // r.Message = strutil.Byte2str(formatArgsWithSpaces(args)) r.Message = formatArgsWithSpaces(args) - r.logWrite(level) + // r.logWrite(level) + r.logger.writeRecord(level, r) } func (r *Record) logf(level Level, format string, args []any) { + r.Level = level r.Message = fmt.Sprintf(format, args...) - r.logWrite(level) + // r.logWrite(level) + r.logger.writeRecord(level, r) } // Log a message with level diff --git a/rotatefile/any.go b/rotatefile/any.go deleted file mode 100644 index b200627..0000000 --- a/rotatefile/any.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build !go1.18 -// +build !go1.18 - -package rotatefile - -// alias of interface{}, use for go < 1.18 -type any = interface{} diff --git a/sugared.go b/sugared.go index 6f5ad14..e9e14c0 100644 --- a/sugared.go +++ b/sugared.go @@ -93,8 +93,7 @@ func (sl *SugaredLogger) Close() error { _ = sl.Logger.VisitAll(func(handler Handler) error { // TIP: must exclude self if _, ok := handler.(*SugaredLogger); !ok { - err := handler.Close() - if err != nil { + if err := handler.Close(); err != nil { sl.err = err } } diff --git a/write.go b/write.go index 0d2d44d..0328e12 100644 --- a/write.go +++ b/write.go @@ -6,21 +6,20 @@ package slog // --------------------------------------------------------------------------- // -func (r *Record) logWrite(level Level) { - // Will reduce memory allocation once - // r.Message = strutil.Byte2str(message) - - // var buf *bytes.Buffer - // buf = bufferPool.Get().(*bytes.Buffer) - // defer bufferPool.Put(buf) - // r.Buffer = buf - - // TODO release on here ?? - // defer r.logger.releaseRecord(r) - r.Level = level - r.logger.writeRecord(level, r) - // r.Buffer = nil -} +// func (r *Record) logWrite(level Level) { +// Will reduce memory allocation once +// r.Message = strutil.Byte2str(message) + +// var buf *bytes.Buffer +// buf = bufferPool.Get().(*bytes.Buffer) +// defer bufferPool.Put(buf) +// r.Buffer = buf + +// TODO release on here ?? +// defer r.logger.releaseRecord(r) +// r.logger.writeRecord(level, r) +// r.Buffer = nil +// } // Init something for record. func (r *Record) Init(lowerLevelName bool) {