| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package util
- import (
- "fmt"
- "github.com/fatih/color"
- "sync"
- "time"
- )
- const (
- // LevelError 错误
- LevelError = iota
- // LevelWarning 警告
- LevelWarning
- // LevelInformational 提示
- LevelInformational
- // LevelDebug 除错
- LevelDebug
- )
- var GloablLogger *Logger
- var Level = LevelDebug
- // Logger 日志
- type Logger struct {
- level int
- mu sync.Mutex
- }
- // 日志颜色
- var colors = map[string]func(a ...interface{}) string{
- "Warning": color.New(color.FgYellow).Add(color.Bold).SprintFunc(),
- "Panic": color.New(color.BgRed).Add(color.Bold).SprintFunc(),
- "Error": color.New(color.FgRed).Add(color.Bold).SprintFunc(),
- "Info": color.New(color.FgCyan).Add(color.Bold).SprintFunc(),
- "Debug": color.New(color.FgWhite).Add(color.Bold).SprintFunc(),
- }
- // 不同级别前缀与时间的间隔,保持宽度一致
- var spaces = map[string]string{
- "Warning": "",
- "Panic": " ",
- "Error": " ",
- "Info": " ",
- "Debug": " ",
- }
- // Println 打印
- func (ll *Logger) Println(prefix string, msg string) {
- // TODO Release时去掉
- c := color.New()
- ll.mu.Lock()
- defer ll.mu.Unlock()
- _, _ = c.Printf(
- "%s%s %s %s\n",
- colors[prefix]("["+prefix+"]"),
- spaces[prefix],
- time.Now().Format("2006-01-02 15:04:05"),
- msg,
- )
- }
- // Panic 极端错误
- func (ll *Logger) Panic(format string, v ...interface{}) {
- if LevelError > ll.level {
- return
- }
- msg := fmt.Sprintf(format, v...)
- ll.Println("Panic", msg)
- panic(msg)
- }
- // Error 错误
- func (ll *Logger) Error(format string, v ...interface{}) {
- if LevelError > ll.level {
- return
- }
- msg := fmt.Sprintf(format, v...)
- ll.Println("Error", msg)
- }
- // Warning 警告
- func (ll *Logger) Warning(format string, v ...interface{}) {
- if LevelWarning > ll.level {
- return
- }
- msg := fmt.Sprintf(format, v...)
- ll.Println("Warning", msg)
- }
- // Info 信息
- func (ll *Logger) Info(format string, v ...interface{}) {
- if LevelInformational > ll.level {
- return
- }
- msg := fmt.Sprintf(format, v...)
- ll.Println("Info", msg)
- }
- // Debug 校验
- func (ll *Logger) Debug(format string, v ...interface{}) {
- if LevelDebug > ll.level {
- return
- }
- msg := fmt.Sprintf(format, v...)
- ll.Println("Debug", msg)
- }
- // BuildLogger 构建logger
- func BuildLogger(level string) {
- intLevel := LevelError
- switch level {
- case "error":
- intLevel = LevelError
- case "warning":
- intLevel = LevelWarning
- case "info":
- intLevel = LevelInformational
- case "debug":
- intLevel = LevelDebug
- }
- l := Logger{
- level: intLevel,
- }
- GloablLogger = &l
- }
- // Log 返回日志对象
- func Log() *Logger {
- if GloablLogger == nil {
- l := Logger{
- level: Level,
- }
- GloablLogger = &l
- }
- return GloablLogger
- }
|