esgo2dump/log/log.go

106 lines
2.0 KiB
Go
Raw 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
)
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)
}
var (
red = color.New(color.FgRed)
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-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...)
}
func Debug(msg string, data ...any) {
defaultLogger.Debug(msg, data...)
}
func Info(msg string, data ...any) {
2024-05-28 22:46:28 +08:00
defaultLogger.Info(msg, data...)
}
func Warn(msg string, data ...any) {
2024-05-28 22:46:28 +08:00
defaultLogger.Warn(msg, data...)
}
func Error(msg string, data ...any) {
2024-05-28 22:46:28 +08:00
defaultLogger.Error(msg, data...)
}
2024-05-24 17:27:52 +08:00
type WroteLogger interface {
Info(msg string, data ...any)
}