From 76b8a3840effecfdb2e8fe8c3b9f6c78b850ed6a Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Sat, 2 Sep 2023 11:35:41 +0800 Subject: [PATCH 1/3] feat: zap log utils --- go.mod | 6 +++++- go.sum | 17 +++++------------ next/logger/logger.go | 17 +++++++++++++++++ next/main.go | 13 +++++++++++++ 4 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 next/logger/logger.go create mode 100644 next/main.go diff --git a/go.mod b/go.mod index 9225b6b..f3fbe71 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,11 @@ require ( github.com/klauspost/compress v1.16.7 github.com/robfig/cron v1.2.0 github.com/sirupsen/logrus v1.9.3 + go.uber.org/zap v1.25.0 gopkg.in/yaml.v3 v3.0.1 ) -require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect +require ( + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/sys v0.6.0 // indirect +) diff --git a/go.sum b/go.sum index 9ec184f..86b2028 100644 --- a/go.sum +++ b/go.sum @@ -1,27 +1,20 @@ -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-http-utils/headers v0.0.0-20181008091004-fed159eddc2a h1:v6zMvHuY9yue4+QkG/HQ/W67wvtQmWJ4SDo9aK/GIno= github.com/go-http-utils/headers v0.0.0-20181008091004-fed159eddc2a/go.mod h1:I79BieaU4fxrw4LMXby6q5OS9XnoR9UIKLOzDFjUmuw= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= +go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/next/logger/logger.go b/next/logger/logger.go new file mode 100644 index 0000000..ffeea04 --- /dev/null +++ b/next/logger/logger.go @@ -0,0 +1,17 @@ +package logger + +import "go.uber.org/zap" + +var Logger *zap.SugaredLogger + +func init() { + log, err := zap.NewDevelopment() + if err != nil { + panic("log utils init failed") + } + + // TODO: more zap logger configure + // TODO: reserve raw logger handle + + Logger = log.Sugar() +} diff --git a/next/main.go b/next/main.go new file mode 100644 index 0000000..a106d2d --- /dev/null +++ b/next/main.go @@ -0,0 +1,13 @@ +package main + +import ( + . "XProxy/next/logger" +) + +func main() { + Logger.Debugf("here is %s level", "debug") + Logger.Infof("here is %s level", "info") + Logger.Warnf("here is %s level", "warn") + Logger.Errorf("here is %s level", "error") + +} From c23ba6310e2935429afd368d6e48f10ccd003a31 Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Sat, 2 Sep 2023 14:38:17 +0800 Subject: [PATCH 2/3] update: more zap logger configure --- go.mod | 4 +- go.sum | 6 +++ next/logger/logger.go | 107 +++++++++++++++++++++++++++++++++++++++--- 3 files changed, 110 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index f3fbe71..cdc74a0 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,8 @@ require ( ) require ( + github.com/gookit/color v1.5.4 // indirect + github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/sys v0.6.0 // indirect + golang.org/x/sys v0.10.0 // indirect ) diff --git a/go.sum b/go.sum index 86b2028..7a8abcf 100644 --- a/go.sum +++ b/go.sum @@ -3,18 +3,24 @@ github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-http-utils/headers v0.0.0-20181008091004-fed159eddc2a/go.mod h1:I79BieaU4fxrw4LMXby6q5OS9XnoR9UIKLOzDFjUmuw= +github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= +github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/next/logger/logger.go b/next/logger/logger.go index ffeea04..a14634e 100644 --- a/next/logger/logger.go +++ b/next/logger/logger.go @@ -1,17 +1,112 @@ package logger -import "go.uber.org/zap" +import ( + "fmt" + "go.uber.org/zap" + "os" + "time" +) +import "go.uber.org/zap/zapcore" var Logger *zap.SugaredLogger +const ( + logTmFmt = "2006-01-02 15:04:05" +) + func init() { - log, err := zap.NewDevelopment() - if err != nil { - panic("log utils init failed") - } + + //coreConfig := zapcore.EncoderConfig{ + // TimeKey: "ts", + // LevelKey: "level", + // NameKey: "logger", + // CallerKey: "caller", + // FunctionKey: zapcore.OmitKey, + // MessageKey: "msg", + // StacktraceKey: "stacktrace", + // LineEnding: zapcore.DefaultLineEnding, // 默认换行符"\n" + // EncodeLevel: zapcore.CapitalColorLevelEncoder, + // EncodeTime: zapcore.RFC3339TimeEncoder, // 日志时间格式显示 + // EncodeDuration: zapcore.MillisDurationEncoder, // 时间序列化,Duration为经过的浮点秒数 + // EncodeCaller: zapcore.ShortCallerEncoder, // 日志行号显示 + //} + // + //encoder := zapcore.NewConsoleEncoder(coreConfig) + // + //newCore := zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.DebugLevel) + // + //logger := zap.New(newCore) + // + //Logger = logger.Sugar() + + GetLogger() + + //log, err := zap.NewDevelopment() + //if err != nil { + // panic("log utils init failed") + //} // TODO: more zap logger configure // TODO: reserve raw logger handle - Logger = log.Sugar() + //Logger = log.Sugar() +} + +func GetLogger() { + config := zapcore.EncoderConfig{ + MessageKey: "M", + LevelKey: "L", + TimeKey: "T", + NameKey: "N", + CallerKey: "C", + FunctionKey: "F", + StacktraceKey: "S", + SkipLineEnding: false, + LineEnding: "!!!\n", + + EncodeLevel: logEncodeLevel, + EncodeTime: logEncodeTime, + EncodeDuration: zapcore.StringDurationEncoder, + EncodeCaller: logEncodeCaller, + + EncodeName: logEncodeName, + ConsoleSeparator: "$$", + } + + //var zc = zap.Config{ + // Level: zap.NewAtomicLevelAt(zapcore.DebugLevel), + // Development: false, + // DisableCaller: false, + // DisableStacktrace: false, + // Sampling: nil, + // Encoding: "json", + // EncoderConfig: config, + // OutputPaths: []string{"stdout"}, + // ErrorOutputPaths: []string{"stderr"}, + // InitialFields: map[string]interface{}{"app": "zapdex"}, + //} + + newCore := zapcore.NewCore(zapcore.NewConsoleEncoder(config), zapcore.Lock(os.Stderr), zapcore.DebugLevel) + //newCore := zapcore.NewCore(zapcore.NewJSONEncoder(config), zapcore.Lock(os.Stderr), zapcore.DebugLevel) + logger := zap.New(newCore, zap.AddCaller()) + //logger, _ := zc.Build() + zap.ReplaceGlobals(logger) + Logger = logger.Sugar() +} + +func logEncodeLevel(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) { + enc.AppendString("[" + level.CapitalString() + "]") +} + +func logEncodeTime(t time.Time, enc zapcore.PrimitiveArrayEncoder) { + enc.AppendString("[[" + t.Format(logTmFmt) + "]]") +} + +func logEncodeCaller(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) { + enc.AppendString("{" + caller.TrimmedPath() + "}") +} + +func logEncodeName(loggerName string, enc zapcore.PrimitiveArrayEncoder) { + fmt.Println(loggerName) + enc.AppendString("{{" + loggerName + "}}") } From ac17a453debb6efe2b44eab0425a5a7a13f2ff4a Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Sat, 2 Sep 2023 15:20:22 +0800 Subject: [PATCH 3/3] feat: custom log format --- next/logger/logger.go | 46 ++++++++++++++++++++++++++++++++----------- next/main.go | 2 +- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/next/logger/logger.go b/next/logger/logger.go index a14634e..e7360c3 100644 --- a/next/logger/logger.go +++ b/next/logger/logger.go @@ -62,15 +62,17 @@ func GetLogger() { FunctionKey: "F", StacktraceKey: "S", SkipLineEnding: false, - LineEnding: "!!!\n", + LineEnding: "\n", - EncodeLevel: logEncodeLevel, + EncodeLevel: logEncodeLevel, + //EncodeLevel: zapcore.CapitalColorLevelEncoder, EncodeTime: logEncodeTime, EncodeDuration: zapcore.StringDurationEncoder, - EncodeCaller: logEncodeCaller, + //EncodeCaller: logEncodeCaller, + EncodeCaller: zapcore.ShortCallerEncoder, - EncodeName: logEncodeName, - ConsoleSeparator: "$$", + //EncodeName: logEncodeName, + ConsoleSeparator: " ", } //var zc = zap.Config{ @@ -89,24 +91,44 @@ func GetLogger() { newCore := zapcore.NewCore(zapcore.NewConsoleEncoder(config), zapcore.Lock(os.Stderr), zapcore.DebugLevel) //newCore := zapcore.NewCore(zapcore.NewJSONEncoder(config), zapcore.Lock(os.Stderr), zapcore.DebugLevel) logger := zap.New(newCore, zap.AddCaller()) + //logger := zap.New(newCore) //logger, _ := zc.Build() + //logger.Named("123") + //fmt.Println(logger.Name()) + zap.ReplaceGlobals(logger) Logger = logger.Sugar() } func logEncodeLevel(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) { - enc.AppendString("[" + level.CapitalString() + "]") + enc.AppendString(func(level zapcore.Level) string { + levelStr := level.CapitalString() + // TODO: using shell codes map + switch level { + case zapcore.DebugLevel: + return fmt.Sprintf("\x1b[39m[%s]\x1b[0m", levelStr) + case zapcore.InfoLevel: + return fmt.Sprintf("\x1b[32m[%s]\x1b[0m", levelStr) + case zapcore.WarnLevel: + return fmt.Sprintf("\x1b[33m[%s]\x1b[0m", levelStr) + case zapcore.ErrorLevel: + return fmt.Sprintf("\x1b[31m[%s]\x1b[0m", levelStr) + case zapcore.PanicLevel: + return fmt.Sprintf("\x1b[95m[%s]\x1b[0m", levelStr) + default: + return fmt.Sprintf("[%s]", levelStr) + } + }(level)) } func logEncodeTime(t time.Time, enc zapcore.PrimitiveArrayEncoder) { - enc.AppendString("[[" + t.Format(logTmFmt) + "]]") + // TODO: using `2006-01-02 15:04:05.xxx` format + enc.AppendString(fmt.Sprintf( + "\x1b[36m%s\x1b[0m \x1b[90m%s\x1b[0m", + "[XProxy]", t.Format("2006-01-02 15:04:05"), + )) } func logEncodeCaller(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString("{" + caller.TrimmedPath() + "}") } - -func logEncodeName(loggerName string, enc zapcore.PrimitiveArrayEncoder) { - fmt.Println(loggerName) - enc.AppendString("{{" + loggerName + "}}") -} diff --git a/next/main.go b/next/main.go index a106d2d..d87fbe8 100644 --- a/next/main.go +++ b/next/main.go @@ -9,5 +9,5 @@ func main() { Logger.Infof("here is %s level", "info") Logger.Warnf("here is %s level", "warn") Logger.Errorf("here is %s level", "error") - + //Logger.Panicf("here is %s level", "panic") }