116 lines
2.4 KiB
Go
116 lines
2.4 KiB
Go
|
package log
|
||
|
|
||
|
import (
|
||
|
"github.com/fatih/color"
|
||
|
"io"
|
||
|
"sync"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type LogLevel uint32
|
||
|
|
||
|
const (
|
||
|
LogLevelDebug = iota
|
||
|
LogLevelInfo
|
||
|
LogLevelWarn
|
||
|
LogLevelError
|
||
|
LogLevelPanic
|
||
|
LogLevelFatal
|
||
|
)
|
||
|
|
||
|
type logger struct {
|
||
|
sync.Mutex
|
||
|
timeFormat string
|
||
|
writer io.Writer
|
||
|
level LogLevel
|
||
|
debug func(prefix, timestamp, msg string, data ...any)
|
||
|
info func(prefix, timestamp, msg string, data ...any)
|
||
|
warn func(prefix, timestamp, msg string, data ...any)
|
||
|
error func(prefix, timestamp, msg string, data ...any)
|
||
|
panic func(prefix, timestamp, msg string, data ...any)
|
||
|
fatal func(prefix, timestamp, msg string, data ...any)
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
red = color.New(color.FgRed)
|
||
|
hired = color.New(color.FgHiRed)
|
||
|
green = color.New(color.FgGreen)
|
||
|
yellow = color.New(color.FgYellow)
|
||
|
white = color.New(color.FgWhite)
|
||
|
)
|
||
|
|
||
|
func (l *logger) SetTimeFormat(format string) {
|
||
|
l.Lock()
|
||
|
defer l.Unlock()
|
||
|
l.timeFormat = format
|
||
|
}
|
||
|
|
||
|
func (l *logger) SetLogLevel(level LogLevel) {
|
||
|
l.Lock()
|
||
|
defer l.Unlock()
|
||
|
|
||
|
if level > LogLevelDebug {
|
||
|
l.debug = nilLogger
|
||
|
} else {
|
||
|
l.debug = normalLogger
|
||
|
}
|
||
|
|
||
|
if level > LogLevelInfo {
|
||
|
l.info = nilLogger
|
||
|
} else {
|
||
|
l.info = normalLogger
|
||
|
}
|
||
|
|
||
|
if level > LogLevelWarn {
|
||
|
l.warn = nilLogger
|
||
|
} else {
|
||
|
l.warn = normalLogger
|
||
|
}
|
||
|
|
||
|
if level > LogLevelError {
|
||
|
l.error = nilLogger
|
||
|
} else {
|
||
|
l.error = normalLogger
|
||
|
}
|
||
|
|
||
|
if level > LogLevelPanic {
|
||
|
l.panic = nilLogger
|
||
|
} else {
|
||
|
l.panic = panicLogger
|
||
|
}
|
||
|
|
||
|
if level > LogLevelFatal {
|
||
|
l.fatal = nilLogger
|
||
|
} else {
|
||
|
l.fatal = fatalLogger
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (l *logger) Debug(msg string, data ...any) {
|
||
|
l.debug(white.Sprint("Debug "), time.Now().Format(l.timeFormat), msg, data...)
|
||
|
}
|
||
|
|
||
|
func (l *logger) Info(msg string, data ...any) {
|
||
|
l.info(green.Sprint("Info "), time.Now().Format(l.timeFormat), msg, data...)
|
||
|
}
|
||
|
|
||
|
func (l *logger) Warn(msg string, data ...any) {
|
||
|
l.warn(yellow.Sprint("Warn "), time.Now().Format(l.timeFormat), msg, data...)
|
||
|
}
|
||
|
|
||
|
func (l *logger) Error(msg string, data ...any) {
|
||
|
l.error(red.Sprint("Error "), time.Now().Format(l.timeFormat), msg, data...)
|
||
|
}
|
||
|
|
||
|
func (l *logger) Panic(msg string, data ...any) {
|
||
|
l.panic(hired.Sprint("Panic "), time.Now().Format(l.timeFormat), msg, data...)
|
||
|
}
|
||
|
|
||
|
func (l *logger) Fatal(msg string, data ...any) {
|
||
|
l.fatal(hired.Sprint("Fatal "), time.Now().Format(l.timeFormat), msg, data...)
|
||
|
}
|
||
|
|
||
|
type WroteLogger interface {
|
||
|
Info(msg string, data ...any)
|
||
|
}
|