From 58a17c65a1c5976b79c75916e5557e0aaaad6f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E4=B9=8B=E5=87=8C=E6=AE=87?= Date: Mon, 4 Oct 2021 07:53:09 +0800 Subject: [PATCH 1/5] feat: add console log color support --- global/log_hook.go | 40 ++++++++++++++++++++++++++++++++++++++++ go.mod | 2 ++ go.sum | 6 ++++++ 3 files changed, 48 insertions(+) diff --git a/global/log_hook.go b/global/log_hook.go index eb4f273..c2a6675 100644 --- a/global/log_hook.go +++ b/global/log_hook.go @@ -9,6 +9,7 @@ import ( "strings" "sync" + "github.com/gookit/color" "github.com/sirupsen/logrus" ) @@ -183,6 +184,9 @@ type LogFormat struct{} func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { buf := NewBuffer() defer PutBuffer(buf) + + buf.WriteString(GetLogLevelColorCode(entry.Level)) + buf.WriteByte('[') buf.WriteString(entry.Time.Format("2006-01-02 15:04:05")) buf.WriteString("] [") @@ -190,6 +194,42 @@ func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { buf.WriteString("]: ") buf.WriteString(entry.Message) buf.WriteString(" \n") + + buf.WriteString(color.ResetSet) + ret := append([]byte(nil), buf.Bytes()...) // copy buffer return ret, nil } + +var ( + colorCodePanic = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) + colorCodeFatal = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) + colorCodeError = fmt.Sprintf(color.SettingTpl, color.Style{color.Red}.String()) + colorCodeWarn = fmt.Sprintf(color.SettingTpl, color.Style{color.Yellow}.String()) + colorCodeInfo = fmt.Sprintf(color.SettingTpl, color.Style{color.Green}.String()) + colorCodeDebug = fmt.Sprintf(color.SettingTpl, color.Style{color.White}.String()) + colorCodeTrace = fmt.Sprintf(color.SettingTpl, color.Style{color.Cyan}.String()) +) + +// GetLogLevelColorCode 获取日志等级对应色彩code +func GetLogLevelColorCode(level logrus.Level) string { + switch level { + case logrus.PanicLevel: + return colorCodePanic + case logrus.FatalLevel: + return colorCodeFatal + case logrus.ErrorLevel: + return colorCodeError + case logrus.WarnLevel: + return colorCodeWarn + case logrus.InfoLevel: + return colorCodeInfo + case logrus.DebugLevel: + return colorCodeDebug + case logrus.TraceLevel: + return colorCodeTrace + + default: + return colorCodeInfo + } +} diff --git a/go.mod b/go.mod index 0f76f09..51ef063 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/dustin/go-humanize v1.0.0 github.com/fumiama/go-hide-param v0.1.4 github.com/gabriel-vasile/mimetype v1.3.1 + github.com/gookit/color v1.4.2 github.com/gorilla/websocket v1.4.2 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible @@ -44,6 +45,7 @@ require ( github.com/tidwall/match v1.0.3 // indirect github.com/tidwall/pretty v1.1.0 // indirect github.com/willf/bitset v1.2.0 // indirect + github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect golang.org/x/net v0.0.0-20210505024714-0287a6fb4125 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect diff --git a/go.sum b/go.sum index ff6ff1e..decdbd8 100644 --- a/go.sum +++ b/go.sum @@ -45,6 +45,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gookit/color v1.4.2 h1:tXy44JFSFkKnELV6WaMo/lLfu/meqITX3iAV52do7lk= +github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= @@ -90,6 +92,7 @@ github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDq github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= @@ -104,6 +107,8 @@ github.com/tuotoo/qrcode v0.0.0-20190222102259-ac9c44189bf2 h1:BWVtt2VBY+lmVDu9M github.com/tuotoo/qrcode v0.0.0-20190222102259-ac9c44189bf2/go.mod h1:lPnW9HVS0vJdeYyQtOvIvlXgZPNhUAhwz+z5r8AJk0Y= github.com/wdvxdr1123/go-silk v0.0.0-20210316130616-d47b553def60 h1:lRKf10iIOW0VsH5WDF621ihzR+R2wEBZVtNRHuLLCb4= github.com/wdvxdr1123/go-silk v0.0.0-20210316130616-d47b553def60/go.mod h1:ecFKZPX81BaB70I6ruUgEwYcDOtuNgJGnjdK+MIl5ko= +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= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -134,6 +139,7 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= From 69e5247bde649562d591a0f9a18f160f546cf162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E4=B9=8B=E5=87=8C=E6=AE=87?= Date: Mon, 4 Oct 2021 19:37:11 +0800 Subject: [PATCH 2/5] fix: default not use new lib, only enable when use build tag with_color --- global/log_format.go | 30 ++++++++++++++ global/log_format_with_color.go | 69 +++++++++++++++++++++++++++++++++ global/log_hook.go | 59 ---------------------------- 3 files changed, 99 insertions(+), 59 deletions(-) create mode 100644 global/log_format.go create mode 100644 global/log_format_with_color.go diff --git a/global/log_format.go b/global/log_format.go new file mode 100644 index 0000000..2893338 --- /dev/null +++ b/global/log_format.go @@ -0,0 +1,30 @@ +//go:build !with_color +// +build !with_color + +package global + +import ( + "strings" + + "github.com/sirupsen/logrus" +) + +// LogFormat specialize for go-cqhttp +type LogFormat struct{} + +// Format implements logrus.Formatter +func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { + buf := NewBuffer() + defer PutBuffer(buf) + + buf.WriteByte('[') + buf.WriteString(entry.Time.Format("2006-01-02 15:04:05")) + buf.WriteString("] [") + buf.WriteString(strings.ToUpper(entry.Level.String())) + buf.WriteString("]: ") + buf.WriteString(entry.Message) + buf.WriteString(" \n") + + ret := append([]byte(nil), buf.Bytes()...) // copy buffer + return ret, nil +} diff --git a/global/log_format_with_color.go b/global/log_format_with_color.go new file mode 100644 index 0000000..0c82d58 --- /dev/null +++ b/global/log_format_with_color.go @@ -0,0 +1,69 @@ +//go:build with_color +// +build with_color + +package global + +import ( + "fmt" + "strings" + + "github.com/gookit/color" + "github.com/sirupsen/logrus" +) + +// LogFormat specialize for go-cqhttp +type LogFormat struct{} + +// Format implements logrus.Formatter +func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { + buf := NewBuffer() + defer PutBuffer(buf) + + buf.WriteString(getLogLevelColorCode(entry.Level)) + + buf.WriteByte('[') + buf.WriteString(entry.Time.Format("2006-01-02 15:04:05")) + buf.WriteString("] [") + buf.WriteString(strings.ToUpper(entry.Level.String())) + buf.WriteString("]: ") + buf.WriteString(entry.Message) + buf.WriteString(" \n") + + buf.WriteString(color.ResetSet) + + ret := append([]byte(nil), buf.Bytes()...) // copy buffer + return ret, nil +} + +var ( + colorCodePanic = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) + colorCodeFatal = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) + colorCodeError = fmt.Sprintf(color.SettingTpl, color.Style{color.Red}.String()) + colorCodeWarn = fmt.Sprintf(color.SettingTpl, color.Style{color.Yellow}.String()) + colorCodeInfo = fmt.Sprintf(color.SettingTpl, color.Style{color.Green}.String()) + colorCodeDebug = fmt.Sprintf(color.SettingTpl, color.Style{color.White}.String()) + colorCodeTrace = fmt.Sprintf(color.SettingTpl, color.Style{color.Cyan}.String()) +) + +// getLogLevelColorCode 获取日志等级对应色彩code +func getLogLevelColorCode(level logrus.Level) string { + switch level { + case logrus.PanicLevel: + return colorCodePanic + case logrus.FatalLevel: + return colorCodeFatal + case logrus.ErrorLevel: + return colorCodeError + case logrus.WarnLevel: + return colorCodeWarn + case logrus.InfoLevel: + return colorCodeInfo + case logrus.DebugLevel: + return colorCodeDebug + case logrus.TraceLevel: + return colorCodeTrace + + default: + return colorCodeInfo + } +} diff --git a/global/log_hook.go b/global/log_hook.go index c2a6675..00ab0d3 100644 --- a/global/log_hook.go +++ b/global/log_hook.go @@ -6,10 +6,8 @@ import ( "os" "path/filepath" "reflect" - "strings" "sync" - "github.com/gookit/color" "github.com/sirupsen/logrus" ) @@ -176,60 +174,3 @@ func GetLogLevel(level string) []logrus.Level { } } } - -// LogFormat specialize for go-cqhttp -type LogFormat struct{} - -// Format implements logrus.Formatter -func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { - buf := NewBuffer() - defer PutBuffer(buf) - - buf.WriteString(GetLogLevelColorCode(entry.Level)) - - buf.WriteByte('[') - buf.WriteString(entry.Time.Format("2006-01-02 15:04:05")) - buf.WriteString("] [") - buf.WriteString(strings.ToUpper(entry.Level.String())) - buf.WriteString("]: ") - buf.WriteString(entry.Message) - buf.WriteString(" \n") - - buf.WriteString(color.ResetSet) - - ret := append([]byte(nil), buf.Bytes()...) // copy buffer - return ret, nil -} - -var ( - colorCodePanic = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) - colorCodeFatal = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) - colorCodeError = fmt.Sprintf(color.SettingTpl, color.Style{color.Red}.String()) - colorCodeWarn = fmt.Sprintf(color.SettingTpl, color.Style{color.Yellow}.String()) - colorCodeInfo = fmt.Sprintf(color.SettingTpl, color.Style{color.Green}.String()) - colorCodeDebug = fmt.Sprintf(color.SettingTpl, color.Style{color.White}.String()) - colorCodeTrace = fmt.Sprintf(color.SettingTpl, color.Style{color.Cyan}.String()) -) - -// GetLogLevelColorCode 获取日志等级对应色彩code -func GetLogLevelColorCode(level logrus.Level) string { - switch level { - case logrus.PanicLevel: - return colorCodePanic - case logrus.FatalLevel: - return colorCodeFatal - case logrus.ErrorLevel: - return colorCodeError - case logrus.WarnLevel: - return colorCodeWarn - case logrus.InfoLevel: - return colorCodeInfo - case logrus.DebugLevel: - return colorCodeDebug - case logrus.TraceLevel: - return colorCodeTrace - - default: - return colorCodeInfo - } -} From f784e94a4a50fbc19fd95aec31bddc79a77e7b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E4=B9=8B=E5=87=8C=E6=AE=87?= Date: Tue, 5 Oct 2021 01:07:36 +0800 Subject: [PATCH 3/5] feat: console and file log use different formatter, and remove build tag --- global/log_format.go | 30 ------------ global/log_format_with_color.go | 69 -------------------------- global/log_hook.go | 85 +++++++++++++++++++++++++++++++-- main.go | 5 +- 4 files changed, 84 insertions(+), 105 deletions(-) delete mode 100644 global/log_format.go delete mode 100644 global/log_format_with_color.go diff --git a/global/log_format.go b/global/log_format.go deleted file mode 100644 index 2893338..0000000 --- a/global/log_format.go +++ /dev/null @@ -1,30 +0,0 @@ -//go:build !with_color -// +build !with_color - -package global - -import ( - "strings" - - "github.com/sirupsen/logrus" -) - -// LogFormat specialize for go-cqhttp -type LogFormat struct{} - -// Format implements logrus.Formatter -func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { - buf := NewBuffer() - defer PutBuffer(buf) - - buf.WriteByte('[') - buf.WriteString(entry.Time.Format("2006-01-02 15:04:05")) - buf.WriteString("] [") - buf.WriteString(strings.ToUpper(entry.Level.String())) - buf.WriteString("]: ") - buf.WriteString(entry.Message) - buf.WriteString(" \n") - - ret := append([]byte(nil), buf.Bytes()...) // copy buffer - return ret, nil -} diff --git a/global/log_format_with_color.go b/global/log_format_with_color.go deleted file mode 100644 index 0c82d58..0000000 --- a/global/log_format_with_color.go +++ /dev/null @@ -1,69 +0,0 @@ -//go:build with_color -// +build with_color - -package global - -import ( - "fmt" - "strings" - - "github.com/gookit/color" - "github.com/sirupsen/logrus" -) - -// LogFormat specialize for go-cqhttp -type LogFormat struct{} - -// Format implements logrus.Formatter -func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { - buf := NewBuffer() - defer PutBuffer(buf) - - buf.WriteString(getLogLevelColorCode(entry.Level)) - - buf.WriteByte('[') - buf.WriteString(entry.Time.Format("2006-01-02 15:04:05")) - buf.WriteString("] [") - buf.WriteString(strings.ToUpper(entry.Level.String())) - buf.WriteString("]: ") - buf.WriteString(entry.Message) - buf.WriteString(" \n") - - buf.WriteString(color.ResetSet) - - ret := append([]byte(nil), buf.Bytes()...) // copy buffer - return ret, nil -} - -var ( - colorCodePanic = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) - colorCodeFatal = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) - colorCodeError = fmt.Sprintf(color.SettingTpl, color.Style{color.Red}.String()) - colorCodeWarn = fmt.Sprintf(color.SettingTpl, color.Style{color.Yellow}.String()) - colorCodeInfo = fmt.Sprintf(color.SettingTpl, color.Style{color.Green}.String()) - colorCodeDebug = fmt.Sprintf(color.SettingTpl, color.Style{color.White}.String()) - colorCodeTrace = fmt.Sprintf(color.SettingTpl, color.Style{color.Cyan}.String()) -) - -// getLogLevelColorCode 获取日志等级对应色彩code -func getLogLevelColorCode(level logrus.Level) string { - switch level { - case logrus.PanicLevel: - return colorCodePanic - case logrus.FatalLevel: - return colorCodeFatal - case logrus.ErrorLevel: - return colorCodeError - case logrus.WarnLevel: - return colorCodeWarn - case logrus.InfoLevel: - return colorCodeInfo - case logrus.DebugLevel: - return colorCodeDebug - case logrus.TraceLevel: - return colorCodeTrace - - default: - return colorCodeInfo - } -} diff --git a/global/log_hook.go b/global/log_hook.go index 00ab0d3..4d97f16 100644 --- a/global/log_hook.go +++ b/global/log_hook.go @@ -6,8 +6,10 @@ import ( "os" "path/filepath" "reflect" + "strings" "sync" + "github.com/gookit/color" "github.com/sirupsen/logrus" ) @@ -79,10 +81,20 @@ func (hook *LocalHook) Fire(entry *logrus.Entry) error { } // SetFormatter 设置日志格式 -func (hook *LocalHook) SetFormatter(formatter logrus.Formatter) { +func (hook *LocalHook) SetFormatter(consoleFormatter, fileFormatter logrus.Formatter) { hook.lock.Lock() defer hook.lock.Unlock() + consoleFormatter = tryChangeFormatter(consoleFormatter) + fileFormatter = tryChangeFormatter(fileFormatter) + + // 用于在console写出 + logrus.SetFormatter(consoleFormatter) + // 用于写入文件 + hook.formatter = fileFormatter +} + +func tryChangeFormatter(formatter logrus.Formatter) logrus.Formatter { if formatter == nil { // 用默认的 formatter = &logrus.TextFormatter{DisableColors: true} @@ -95,8 +107,8 @@ func (hook *LocalHook) SetFormatter(formatter logrus.Formatter) { // todo } } - logrus.SetFormatter(formatter) - hook.formatter = formatter + + return formatter } // SetWriter 设置Writer @@ -114,11 +126,11 @@ func (hook *LocalHook) SetPath(path string) { } // NewLocalHook 初始化本地日志钩子实现 -func NewLocalHook(args interface{}, formatter logrus.Formatter, levels ...logrus.Level) *LocalHook { +func NewLocalHook(args interface{}, consoleFormatter, fileFormatter logrus.Formatter, levels ...logrus.Level) *LocalHook { hook := &LocalHook{ lock: new(sync.Mutex), } - hook.SetFormatter(formatter) + hook.SetFormatter(consoleFormatter, fileFormatter) hook.levels = append(hook.levels, levels...) switch arg := args.(type) { @@ -174,3 +186,66 @@ func GetLogLevel(level string) []logrus.Level { } } } + +// LogFormat specialize for go-cqhttp +type LogFormat struct { + EnableColor bool +} + +// Format implements logrus.Formatter +func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { + buf := NewBuffer() + defer PutBuffer(buf) + + if f.EnableColor { + buf.WriteString(GetLogLevelColorCode(entry.Level)) + } + + buf.WriteByte('[') + buf.WriteString(entry.Time.Format("2006-01-02 15:04:05")) + buf.WriteString("] [") + buf.WriteString(strings.ToUpper(entry.Level.String())) + buf.WriteString("]: ") + buf.WriteString(entry.Message) + buf.WriteString(" \n") + + if f.EnableColor { + buf.WriteString(color.ResetSet) + } + + ret := append([]byte(nil), buf.Bytes()...) // copy buffer + return ret, nil +} + +var ( + colorCodePanic = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) + colorCodeFatal = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) + colorCodeError = fmt.Sprintf(color.SettingTpl, color.Style{color.Red}.String()) + colorCodeWarn = fmt.Sprintf(color.SettingTpl, color.Style{color.Yellow}.String()) + colorCodeInfo = fmt.Sprintf(color.SettingTpl, color.Style{color.Green}.String()) + colorCodeDebug = fmt.Sprintf(color.SettingTpl, color.Style{color.White}.String()) + colorCodeTrace = fmt.Sprintf(color.SettingTpl, color.Style{color.Cyan}.String()) +) + +// GetLogLevelColorCode 获取日志等级对应色彩code +func GetLogLevelColorCode(level logrus.Level) string { + switch level { + case logrus.PanicLevel: + return colorCodePanic + case logrus.FatalLevel: + return colorCodeFatal + case logrus.ErrorLevel: + return colorCodeError + case logrus.WarnLevel: + return colorCodeWarn + case logrus.InfoLevel: + return colorCodeInfo + case logrus.DebugLevel: + return colorCodeDebug + case logrus.TraceLevel: + return colorCodeTrace + + default: + return colorCodeInfo + } +} diff --git a/main.go b/main.go index cb71b6c..49fe9f5 100644 --- a/main.go +++ b/main.go @@ -68,7 +68,10 @@ func main() { log.Errorf("rotatelogs init err: %v", err) panic(err) } - log.AddHook(global.NewLocalHook(w, global.LogFormat{}, global.GetLogLevel(base.LogLevel)...)) + + consoleFormatter := global.LogFormat{EnableColor: true} + fileFormatter := global.LogFormat{EnableColor: false} + log.AddHook(global.NewLocalHook(w, consoleFormatter, fileFormatter, global.GetLogLevel(base.LogLevel)...)) mkCacheDir := func(path string, _type string) { if !global.PathExists(path) { From e0bd2a74f47180f485b68686d600d2830bd91961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E4=B9=8B=E5=87=8C=E6=AE=87?= Date: Tue, 5 Oct 2021 01:31:53 +0800 Subject: [PATCH 4/5] feat: use existing lib to support color cosnole in windows, and copy part of definition from github.com\gookit\color to avoid new lib --- global/log_hook.go | 27 ++++++++++++++++++--------- go.mod | 4 +--- go.sum | 6 ------ 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/global/log_hook.go b/global/log_hook.go index 4d97f16..93606aa 100644 --- a/global/log_hook.go +++ b/global/log_hook.go @@ -9,7 +9,7 @@ import ( "strings" "sync" - "github.com/gookit/color" + "github.com/mattn/go-colorable" "github.com/sirupsen/logrus" ) @@ -88,6 +88,8 @@ func (hook *LocalHook) SetFormatter(consoleFormatter, fileFormatter logrus.Forma consoleFormatter = tryChangeFormatter(consoleFormatter) fileFormatter = tryChangeFormatter(fileFormatter) + // 支持处理windows平台的console色彩 + logrus.SetOutput(colorable.NewColorableStdout()) // 用于在console写出 logrus.SetFormatter(consoleFormatter) // 用于写入文件 @@ -210,21 +212,28 @@ func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { buf.WriteString(" \n") if f.EnableColor { - buf.WriteString(color.ResetSet) + buf.WriteString(ResetSet) } ret := append([]byte(nil), buf.Bytes()...) // copy buffer return ret, nil } +// 为了不引入新依赖,直接将对应库需要的部分复制过来了,具体可参考 github.com\gookit\color@v1.4.2\color.go +const ResetSet = "\x1b[0m" + +const ( + SettingTpl = "\x1b[%sm" +) + var ( - colorCodePanic = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) - colorCodeFatal = fmt.Sprintf(color.SettingTpl, color.Style{color.Bold, color.Red}.String()) - colorCodeError = fmt.Sprintf(color.SettingTpl, color.Style{color.Red}.String()) - colorCodeWarn = fmt.Sprintf(color.SettingTpl, color.Style{color.Yellow}.String()) - colorCodeInfo = fmt.Sprintf(color.SettingTpl, color.Style{color.Green}.String()) - colorCodeDebug = fmt.Sprintf(color.SettingTpl, color.Style{color.White}.String()) - colorCodeTrace = fmt.Sprintf(color.SettingTpl, color.Style{color.Cyan}.String()) + colorCodePanic = fmt.Sprintf(SettingTpl, "1;31") // color.Style{color.Bold, color.Red}.String() + colorCodeFatal = fmt.Sprintf(SettingTpl, "1;31") // color.Style{color.Bold, color.Red}.String() + colorCodeError = fmt.Sprintf(SettingTpl, "31") // color.Style{color.Red}.String() + colorCodeWarn = fmt.Sprintf(SettingTpl, "33") // color.Style{color.Yellow}.String() + colorCodeInfo = fmt.Sprintf(SettingTpl, "32") // color.Style{color.Green}.String() + colorCodeDebug = fmt.Sprintf(SettingTpl, "37") // color.Style{color.White}.String() + colorCodeTrace = fmt.Sprintf(SettingTpl, "36") // color.Style{color.Cyan}.String() ) // GetLogLevelColorCode 获取日志等级对应色彩code diff --git a/go.mod b/go.mod index 51ef063..a4e3f37 100644 --- a/go.mod +++ b/go.mod @@ -11,10 +11,10 @@ require ( github.com/dustin/go-humanize v1.0.0 github.com/fumiama/go-hide-param v0.1.4 github.com/gabriel-vasile/mimetype v1.3.1 - github.com/gookit/color v1.4.2 github.com/gorilla/websocket v1.4.2 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible + github.com/mattn/go-colorable v0.1.8 github.com/pkg/errors v0.9.1 github.com/segmentio/asm v1.0.0 github.com/sirupsen/logrus v1.8.1 @@ -37,7 +37,6 @@ require ( github.com/klauspost/cpuid/v2 v2.0.6 // indirect github.com/lestrrat-go/strftime v1.0.5 // indirect github.com/maruel/rs v0.0.0-20150922171536-2c81c4312fe4 // indirect - github.com/mattn/go-colorable v0.1.8 // indirect github.com/mattn/go-isatty v0.0.12 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect @@ -45,7 +44,6 @@ require ( github.com/tidwall/match v1.0.3 // indirect github.com/tidwall/pretty v1.1.0 // indirect github.com/willf/bitset v1.2.0 // indirect - github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect golang.org/x/net v0.0.0-20210505024714-0287a6fb4125 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect diff --git a/go.sum b/go.sum index decdbd8..ff6ff1e 100644 --- a/go.sum +++ b/go.sum @@ -45,8 +45,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gookit/color v1.4.2 h1:tXy44JFSFkKnELV6WaMo/lLfu/meqITX3iAV52do7lk= -github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= @@ -92,7 +90,6 @@ github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDq github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= @@ -107,8 +104,6 @@ github.com/tuotoo/qrcode v0.0.0-20190222102259-ac9c44189bf2 h1:BWVtt2VBY+lmVDu9M github.com/tuotoo/qrcode v0.0.0-20190222102259-ac9c44189bf2/go.mod h1:lPnW9HVS0vJdeYyQtOvIvlXgZPNhUAhwz+z5r8AJk0Y= github.com/wdvxdr1123/go-silk v0.0.0-20210316130616-d47b553def60 h1:lRKf10iIOW0VsH5WDF621ihzR+R2wEBZVtNRHuLLCb4= github.com/wdvxdr1123/go-silk v0.0.0-20210316130616-d47b553def60/go.mod h1:ecFKZPX81BaB70I6ruUgEwYcDOtuNgJGnjdK+MIl5ko= -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= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -139,7 +134,6 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= From 931e9220da46b7ca317f721699f2e56057502d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E4=B9=8B=E5=87=8C=E6=AE=87?= Date: Tue, 5 Oct 2021 04:55:59 +0800 Subject: [PATCH 5/5] fix: lint error --- global/log_hook.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/global/log_hook.go b/global/log_hook.go index 93606aa..6fd7512 100644 --- a/global/log_hook.go +++ b/global/log_hook.go @@ -220,9 +220,12 @@ func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) { } // 为了不引入新依赖,直接将对应库需要的部分复制过来了,具体可参考 github.com\gookit\color@v1.4.2\color.go + +// ResetSet 重置色彩 ansi code const ResetSet = "\x1b[0m" const ( + // SettingTpl 开始色彩 ansi code SettingTpl = "\x1b[%sm" )