diff --git a/go.mod b/go.mod index 394b77ab..c7369c61 100644 --- a/go.mod +++ b/go.mod @@ -116,7 +116,7 @@ require ( github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/satori/go.uuid v1.2.0 // indirect - github.com/sirupsen/logrus v1.8.1 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect github.com/soheilhy/cmux v0.1.5 // indirect github.com/spf13/cobra v1.1.3 // indirect github.com/spf13/pflag v1.0.5 // indirect @@ -146,7 +146,7 @@ require ( golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20211020174200-9d6173849985 // indirect + golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/tools v0.1.0 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect diff --git a/go.sum b/go.sum index 23fd3af0..bdcb8f0f 100644 --- a/go.sum +++ b/go.sum @@ -788,6 +788,8 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= @@ -1159,6 +1161,9 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211020174200-9d6173849985 h1:LOlKVhfDyahgmqa97awczplwkjzNaELFg3zRIJ13RYo= golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64 h1:UiNENfZ8gDvpiWw7IpOMQ27spWmThO1RwwdQVbJahJM= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/pkg/logger/formatter.go b/pkg/logger/formatter.go new file mode 100644 index 00000000..e1eb2661 --- /dev/null +++ b/pkg/logger/formatter.go @@ -0,0 +1,65 @@ +package logger + +import ( + "strings" + "time" + + "github.com/fatih/color" + "github.com/sirupsen/logrus" +) + +type formatter struct{} + +// 日志颜色 +var colors = map[logrus.Level]func(a ...interface{}) string{ + logrus.WarnLevel: color.New(color.FgYellow).Add(color.Bold).SprintFunc(), + logrus.PanicLevel: color.New(color.BgHiRed).Add(color.Bold).SprintFunc(), + logrus.FatalLevel: color.New(color.BgRed).Add(color.Bold).SprintFunc(), + logrus.ErrorLevel: color.New(color.FgRed).Add(color.Bold).SprintFunc(), + logrus.InfoLevel: color.New(color.FgCyan).Add(color.Bold).SprintFunc(), + logrus.DebugLevel: color.New(color.FgWhite).Add(color.Bold).SprintFunc(), +} + +// 不同级别前缀与时间的间隔,保持宽度一致 +var spaces = map[logrus.Level]int{ + logrus.WarnLevel: 1, + logrus.PanicLevel: 3, + logrus.ErrorLevel: 3, + logrus.FatalLevel: 3, + logrus.InfoLevel: 4, + logrus.DebugLevel: 3, +} + +func GetLevelText(level logrus.Level) string { + switch level { + case logrus.PanicLevel: + return "Panic" + case logrus.FatalLevel: + return "Fatal" + case logrus.ErrorLevel: + return "Error" + case logrus.WarnLevel: + return "Warning" + case logrus.InfoLevel: + return "Info" + case logrus.DebugLevel: + return "Debug" + default: + return "Unknown" + } +} + +func (f *formatter) Format(entry *logrus.Entry) ([]byte, error) { + c := color.New() + c.EnableColor() + + s := c.Sprintf( + "%s%s %s %s\n", + colors[entry.Level]("["+GetLevelText(entry.Level)+"]"), + strings.Repeat(" ", spaces[entry.Level]), + time.Now().Format("2006-01-02 15:04:05"), + entry.Message, + ) + + return []byte(s), nil +} diff --git a/pkg/logger/init.go b/pkg/logger/init.go new file mode 100644 index 00000000..2fdf0373 --- /dev/null +++ b/pkg/logger/init.go @@ -0,0 +1,20 @@ +package logger + +import ( + "os" + + "github.com/sirupsen/logrus" +) + +func NewLogger() *logrus.Logger { + logger := logrus.New() + logger.SetFormatter(new(formatter)) + logger.SetOutput(os.Stdout) + logger.SetLevel(logrus.DebugLevel) + + return logger +} + +func SetLevel(level logrus.Level) { + GlobalLogger.SetLevel(level) +} diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go new file mode 100644 index 00000000..4b970529 --- /dev/null +++ b/pkg/logger/logger.go @@ -0,0 +1,14 @@ +package logger + +var GlobalLogger = NewLogger() + +var ( + Debug = GlobalLogger.Debugf + Info = GlobalLogger.Infof + Warn = GlobalLogger.Warnf + Warning = GlobalLogger.Warnf + Error = GlobalLogger.Errorf + Fatal = GlobalLogger.Fatalf + Panic = GlobalLogger.Panicf + Println = GlobalLogger.Println +)