|
|
|
@ -10,8 +10,10 @@ import (
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/fatih/color"
|
|
|
|
|
"github.com/mattn/go-colorable"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Base attributes
|
|
|
|
|
const (
|
|
|
|
|
BLUE = color.FgBlue
|
|
|
|
|
BLACK = color.FgBlack
|
|
|
|
@ -21,10 +23,11 @@ const (
|
|
|
|
|
RED = color.FgRed
|
|
|
|
|
WHITE = color.FgWhite
|
|
|
|
|
YELLOW = color.FgYellow
|
|
|
|
|
GREY = color.FgHiYellow
|
|
|
|
|
GREY = color.FgHiRed
|
|
|
|
|
BOLD = color.Bold
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Log Level
|
|
|
|
|
const (
|
|
|
|
|
LvDebug = iota
|
|
|
|
|
LvInfo
|
|
|
|
@ -36,6 +39,7 @@ const (
|
|
|
|
|
LvFatal
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Log Init Data
|
|
|
|
|
var (
|
|
|
|
|
levels = map[int]string{
|
|
|
|
|
LvDebug: "DEBUG",
|
|
|
|
@ -62,10 +66,15 @@ var (
|
|
|
|
|
loghandle *os.File = nil
|
|
|
|
|
HandleFunc func([]color.Attribute, string)
|
|
|
|
|
lock sync.WaitGroup
|
|
|
|
|
waiting = make(chan int, 1)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Output 使用此进行windows支持
|
|
|
|
|
var Output = colorable.NewColorableStdout()
|
|
|
|
|
|
|
|
|
|
func write(logs string) {
|
|
|
|
|
var i int = 0
|
|
|
|
|
var i int
|
|
|
|
|
lock.Add(1)
|
|
|
|
|
defer lock.Done()
|
|
|
|
|
for switching {
|
|
|
|
|
time.Sleep(time.Millisecond * 100)
|
|
|
|
@ -82,6 +91,10 @@ func write(logs string) {
|
|
|
|
|
|
|
|
|
|
func output(level int, showline, showlv, dowrite, doshow bool, strlog string) {
|
|
|
|
|
var logs string
|
|
|
|
|
waiting <- 1
|
|
|
|
|
defer func() {
|
|
|
|
|
<-waiting
|
|
|
|
|
}()
|
|
|
|
|
if level < LogLevel {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
@ -98,67 +111,59 @@ func output(level int, showline, showlv, dowrite, doshow bool, strlog string) {
|
|
|
|
|
logs = fmt.Sprintf("%s %s", date, strlog)
|
|
|
|
|
}
|
|
|
|
|
if doshow {
|
|
|
|
|
for _, v := range Colors[level] {
|
|
|
|
|
color.Set(v)
|
|
|
|
|
}
|
|
|
|
|
fmt.Print(logs)
|
|
|
|
|
color.Set(color.Reset)
|
|
|
|
|
logcolor := color.New(Colors[level]...)
|
|
|
|
|
logstr := logcolor.Sprint(logs)
|
|
|
|
|
fmt.Fprint(Output, logstr)
|
|
|
|
|
}
|
|
|
|
|
if HandleFunc != nil {
|
|
|
|
|
go HandleFunc(Colors[level], logs)
|
|
|
|
|
}
|
|
|
|
|
if dowrite {
|
|
|
|
|
lock.Add(1)
|
|
|
|
|
write(logs)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// StdPrint 进行stdout标准输出
|
|
|
|
|
func StdPrint(c1, c2 color.Attribute, str ...interface{}) {
|
|
|
|
|
color.Set(c1)
|
|
|
|
|
color.Set(c2)
|
|
|
|
|
fmt.Print(str...)
|
|
|
|
|
color.Set(color.Reset)
|
|
|
|
|
waiting <- 1
|
|
|
|
|
defer func() {
|
|
|
|
|
<-waiting
|
|
|
|
|
}()
|
|
|
|
|
colorstr := color.New(c1, c2)
|
|
|
|
|
colorstr.Fprint(Output, str...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func StdPrintf(c1, c2 color.Attribute, format string, str ...interface{}) {
|
|
|
|
|
color.Set(c1)
|
|
|
|
|
color.Set(c2)
|
|
|
|
|
fmt.Printf(format, str...)
|
|
|
|
|
color.Set(color.Reset)
|
|
|
|
|
waiting <- 1
|
|
|
|
|
defer func() {
|
|
|
|
|
<-waiting
|
|
|
|
|
}()
|
|
|
|
|
colorstr := color.New(c1, c2)
|
|
|
|
|
colorstr.Fprintf(Output, format, str...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func StdPrintln(c1, c2 color.Attribute, str ...interface{}) {
|
|
|
|
|
color.Set(c1)
|
|
|
|
|
color.Set(c2)
|
|
|
|
|
fmt.Println(str...)
|
|
|
|
|
color.Set(color.Reset)
|
|
|
|
|
waiting <- 1
|
|
|
|
|
defer func() {
|
|
|
|
|
<-waiting
|
|
|
|
|
}()
|
|
|
|
|
colorstr := color.New(c1, c2)
|
|
|
|
|
colorstr.Fprintln(Output, str...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Print(c1, c2 color.Attribute, str ...interface{}) {
|
|
|
|
|
color.Set(c1)
|
|
|
|
|
color.Set(c2)
|
|
|
|
|
strs := fmt.Sprint(str...)
|
|
|
|
|
fmt.Print(strs)
|
|
|
|
|
color.Set(color.Reset)
|
|
|
|
|
write(strs)
|
|
|
|
|
StdPrint(c1, c2, str...)
|
|
|
|
|
write(fmt.Sprint(str...))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Printf(c1, c2 color.Attribute, format string, str ...interface{}) {
|
|
|
|
|
color.Set(c1)
|
|
|
|
|
color.Set(c2)
|
|
|
|
|
strs := fmt.Sprintf(format, str...)
|
|
|
|
|
fmt.Print(strs)
|
|
|
|
|
color.Set(color.Reset)
|
|
|
|
|
write(strs)
|
|
|
|
|
StdPrintf(c1, c2, format, str...)
|
|
|
|
|
write(fmt.Sprintf(format, str...))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Println(c1, c2 color.Attribute, str ...interface{}) {
|
|
|
|
|
color.Set(c1)
|
|
|
|
|
color.Set(c2)
|
|
|
|
|
strs := fmt.Sprintln(str...)
|
|
|
|
|
fmt.Print(strs)
|
|
|
|
|
color.Set(color.Reset)
|
|
|
|
|
write(strs)
|
|
|
|
|
StdPrintln(c1, c2, str...)
|
|
|
|
|
write(fmt.Sprintln(str...))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Debug(str ...interface{}) {
|
|
|
|
|