esgo2dump/log/log.go

116 lines
2.4 KiB
Go
Raw Permalink Normal View History

package log
import (
"github.com/fatih/color"
2024-05-28 22:46:28 +08:00
"io"
"sync"
"time"
)
2024-05-28 22:46:28 +08:00
type LogLevel uint32
const (
LogLevelDebug = iota
LogLevelInfo
LogLevelWarn
LogLevelError
2024-06-06 10:39:16 +08:00
LogLevelPanic
LogLevelFatal
2024-05-28 22:46:28 +08:00
)
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)
2024-06-06 10:39:16 +08:00
panic func(prefix, timestamp, msg string, data ...any)
fatal func(prefix, timestamp, msg string, data ...any)
2024-05-28 22:46:28 +08:00
}
var (
red = color.New(color.FgRed)
2024-06-06 10:39:16 +08:00
hired = color.New(color.FgHiRed)
green = color.New(color.FgGreen)
yellow = color.New(color.FgYellow)
2024-05-28 22:46:28 +08:00
white = color.New(color.FgWhite)
)
2024-05-28 22:46:28 +08:00
func (l *logger) SetTimeFormat(format string) {
l.Lock()
defer l.Unlock()
l.timeFormat = format
}
2024-05-28 22:46:28 +08:00
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
}
2024-05-28 22:46:28 +08:00
if level > LogLevelWarn {
l.warn = nilLogger
} else {
l.warn = normalLogger
}
2024-05-28 22:46:28 +08:00
if level > LogLevelError {
l.error = nilLogger
} else {
l.error = normalLogger
}
2024-06-06 10:39:16 +08:00
if level > LogLevelPanic {
l.panic = nilLogger
} else {
l.panic = panicLogger
}
if level > LogLevelFatal {
l.fatal = nilLogger
} else {
l.fatal = fatalLogger
}
}
2024-05-28 22:46:28 +08:00
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...)
}
2024-06-06 10:39:16 +08:00
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...)
}
2024-05-24 17:27:52 +08:00
type WroteLogger interface {
Info(msg string, data ...any)
}