From 92dd0eefc6f6e57e19a2dfea706d2d9a03587944 Mon Sep 17 00:00:00 2001 From: FishGoddess <1149062639@qq.com> Date: Thu, 21 Dec 2023 22:09:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8C=85=E7=BA=A7=E5=88=AB?= =?UTF-8?q?=E7=9A=84=E6=97=A5=E5=BF=97=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY.md | 7 ++++--- README.en.md | 6 ++++-- README.md | 6 ++++-- _examples/basic.go | 6 ++++-- _examples/default.go | 4 ++-- default.go | 45 ++++++++++++++++++++++++++++++++++++++++++++ default_test.go | 43 ++++++++++++++++++++++++++++++++++++++++++ doc.go | 12 +++++++----- 8 files changed, 113 insertions(+), 16 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index d985ef8..f277a39 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,10 +1,11 @@ ## ✒ 历史版本的特性介绍 (Features in old versions) -### v1.5.6-alpha (Coming soon) +### v1.5.6-alpha -> 此版本发布于 2023-12-25 +> 此版本发布于 2023-12-21 -* 完善单元测试,提高覆盖率到 80% +* 增加包级别的日志方法 +* PS: 周董的新歌《圣诞星》上线了,怎么说呢哈哈,周董的光芒还是留在回忆里面吧~ ### v1.5.5-alpha diff --git a/README.en.md b/README.en.md index 6975a74..b3c8ce9 100644 --- a/README.en.md +++ b/README.en.md @@ -51,6 +51,8 @@ import ( func main() { // Use default logger to log. // By default, logs will be output to stdout. + // logit.Default() returns the default logger, but we also provide some common logging functions. + logit.Info("hello from logit", "key", 123) logit.Default().Info("hello from logit", "key", 123) // Use a new logger to log. @@ -77,9 +79,9 @@ func main() { logger.Info("check where I'm logged", "file", "logit.log") // What if I want to use default logger and output logs to a file? Try SetDefault. - // It sets a logger to default and you can use it by package function or Default(). + // It sets a logger to default and you can use it by package functions or Default(). logit.SetDefault(logger) - logit.Default().Warn("this is from default logger", "pi", 3.14, "default", true) + logit.Warn("this is from default logger", "pi", 3.14, "default", true) // If you want to change level of logger to info, try WithInfoLevel. // Other levels is similar to info level. diff --git a/README.md b/README.md index 95f89d2..ab91905 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ import ( func main() { // Use default logger to log. // By default, logs will be output to stdout. + // logit.Default() returns the default logger, but we also provide some common logging functions. + logit.Info("hello from logit", "key", 123) logit.Default().Info("hello from logit", "key", 123) // Use a new logger to log. @@ -74,9 +76,9 @@ func main() { logger.Info("check where I'm logged", "file", "logit.log") // What if I want to use default logger and output logs to a file? Try SetDefault. - // It sets a logger to default and you can use it by package function or Default(). + // It sets a logger to default and you can use it by package functions or Default(). logit.SetDefault(logger) - logit.Default().Warn("this is from default logger", "pi", 3.14, "default", true) + logit.Warn("this is from default logger", "pi", 3.14, "default", true) // If you want to change level of logger to info, try WithInfoLevel. // Other levels is similar to info level. diff --git a/_examples/basic.go b/_examples/basic.go index 94e15a7..6d3b882 100644 --- a/_examples/basic.go +++ b/_examples/basic.go @@ -24,6 +24,8 @@ import ( func main() { // Use default logger to log. // By default, logs will be output to stdout. + // logit.Default() returns the default logger, but we also provide some common logging functions. + logit.Info("hello from logit", "key", 123) logit.Default().Info("hello from logit", "key", 123) // Use a new logger to log. @@ -50,9 +52,9 @@ func main() { logger.Info("check where I'm logged", "file", "logit.log") // What if I want to use default logger and output logs to a file? Try SetDefault. - // It sets a logger to default and you can use it by package function or Default(). + // It sets a logger to default and you can use it by package functions or Default(). logit.SetDefault(logger) - logit.Default().Warn("this is from default logger", "pi", 3.14, "default", true) + logit.Warn("this is from default logger", "pi", 3.14, "default", true) // If you want to change level of logger to info, try WithInfoLevel. // Other levels is similar to info level. diff --git a/_examples/default.go b/_examples/default.go index 3a33b79..aea93f9 100644 --- a/_examples/default.go +++ b/_examples/default.go @@ -31,12 +31,12 @@ func main() { return time.Unix(666, 0).In(time.Local) } - logit.Default().Print("println log is info level") + logit.Print("println log is info level") // If you want change the level of old-school logging methods: defaults.LevelPrint = slog.LevelDebug - logit.Default().Print("println log is debug level now") + logit.Print("println log is debug level now") // More fields see defaults package. defaults.HandleError = func(label string, err error) { diff --git a/default.go b/default.go index d75a1ff..305aa40 100644 --- a/default.go +++ b/default.go @@ -15,7 +15,11 @@ package logit import ( + "fmt" + "log/slog" "sync/atomic" + + "github.com/FishGoddess/logit/defaults" ) var defaultLogger atomic.Value @@ -33,3 +37,44 @@ func SetDefault(logger *Logger) { func Default() *Logger { return defaultLogger.Load().(*Logger) } + +// Debug logs a log with msg and args in debug level. +func Debug(msg string, args ...any) { + Default().log(slog.LevelDebug, msg, args...) +} + +// Info logs a log with msg and args in info level. +func Info(msg string, args ...any) { + Default().log(slog.LevelInfo, msg, args...) +} + +// Warn logs a log with msg and args in warn level. +func Warn(msg string, args ...any) { + Default().log(slog.LevelWarn, msg, args...) +} + +// Error logs a log with msg and args in error level. +func Error(msg string, args ...any) { + Default().log(slog.LevelError, msg, args...) +} + +// Printf logs a log with format and args in print level. +// It a old-school way to log. +func Printf(format string, args ...interface{}) { + msg := fmt.Sprintf(format, args...) + Default().log(defaults.LevelPrint, msg) +} + +// Print logs a log with args in print level. +// It a old-school way to log. +func Print(args ...interface{}) { + msg := fmt.Sprint(args...) + Default().log(defaults.LevelPrint, msg) +} + +// Println logs a log with args in print level. +// It a old-school way to log. +func Println(args ...interface{}) { + msg := fmt.Sprintln(args...) + Default().log(defaults.LevelPrint, msg) +} diff --git a/default_test.go b/default_test.go index 613cb02..686c1f4 100644 --- a/default_test.go +++ b/default_test.go @@ -15,7 +15,12 @@ package logit import ( + "bytes" + "io" + "log/slog" "testing" + + "github.com/FishGoddess/logit/handler" ) // go test -v -cover -count=1 -test.cpu=1 -run=^TestSetDefault$ @@ -45,3 +50,41 @@ func TestDefault(t *testing.T) { t.Fatalf("gotLogger %+v != logger %+v", gotLogger, logger) } } + +// go test -v -cover -count=1 -test.cpu=1 -run=^TestDefaultLogger$ +func TestDefaultLogger(t *testing.T) { + handlerName := t.Name() + + newHandler := func(w io.Writer, opts *slog.HandlerOptions) slog.Handler { + return slog.NewTextHandler(w, opts) + } + + handler.Register(handlerName, newHandler) + + buffer := bytes.NewBuffer(make([]byte, 0, 1024)) + logger := NewLogger( + WithDebugLevel(), WithHandler(handlerName), WithWriter(buffer), WithSource(), WithPID(), + ) + + SetDefault(logger) + Debug("debug msg", "key1", 1) + Info("info msg", "key2", 2) + Warn("warn msg", "key3", 3) + Error("error msg", "key4", 4) + + opts := &slog.HandlerOptions{AddSource: true, Level: slog.LevelDebug} + wantBuffer := bytes.NewBuffer(make([]byte, 0, 1024)) + slogLogger := slog.New(newHandler(wantBuffer, opts)).With(keyPID, pid) + + slogLogger.Debug("debug msg", "key1", 1) + slogLogger.Info("info msg", "key2", 2) + slogLogger.Warn("warn msg", "key3", 3) + slogLogger.Error("error msg", "key4", 4) + + got := removeTimeAndSource(buffer.String()) + want := removeTimeAndSource(wantBuffer.String()) + + if got != want { + t.Fatalf("got %s != want %s", got, want) + } +} diff --git a/doc.go b/doc.go index 15f6b09..f5ba28f 100644 --- a/doc.go +++ b/doc.go @@ -19,6 +19,8 @@ Package logit provides an easy way to use foundation for your logging operations // Use default logger to log. // By default, logs will be output to stdout. + // logit.Default() returns the default logger, but we also provide some common logging functions. + logit.Info("hello from logit", "key", 123) logit.Default().Info("hello from logit", "key", 123) // Use a new logger to log. @@ -45,9 +47,9 @@ Package logit provides an easy way to use foundation for your logging operations logger.Info("check where I'm logged", "file", "logit.log") // What if I want to use default logger and output logs to a file? Try SetDefault. - // It sets a logger to default and you can use it by package function or Default(). + // It sets a logger to default and you can use it by package functions or Default(). logit.SetDefault(logger) - logit.Default().Warn("this is from default logger", "pi", 3.14, "default", true) + logit.Warn("this is from default logger", "pi", 3.14, "default", true) // If you want to change level of logger to info, try WithInfoLevel. // Other levels is similar to info level. @@ -261,12 +263,12 @@ Package logit provides an easy way to use foundation for your logging operations return time.Unix(666, 0).In(time.Local) } - logit.Default().Print("println log is info level") + logit.Print("println log is info level") // If you want change the level of old-school logging methods: defaults.LevelPrint = slog.LevelDebug - logit.Default().Print("println log is debug level now") + logit.Print("println log is debug level now") // More fields see defaults package. defaults.HandleError = func(label string, err error) { @@ -315,5 +317,5 @@ package logit // import "github.com/FishGoddess/logit" const ( // Version is the version string representation of logit. - Version = "v1.5.5-alpha" + Version = "v1.5.6-alpha" )