mirror of https://github.com/cloudreve/Cloudreve
				
				
				
			
		
			
				
	
	
		
			151 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
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时去掉
 | 
						|
	// color.NoColor = false
 | 
						|
 | 
						|
	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)
 | 
						|
}
 | 
						|
 | 
						|
// Print GORM 的 Logger实现
 | 
						|
//func (ll *Logger) Print(v ...interface{}) {
 | 
						|
//	if LevelDebug > ll.level {
 | 
						|
//		return
 | 
						|
//	}
 | 
						|
//	msg := fmt.Sprintf("[SQL] %s", v...)
 | 
						|
//	ll.Println(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
 | 
						|
}
 |