2024-05-10 21:40:02 +08:00
|
|
|
package log
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/fatih/color"
|
2024-05-28 22:46:28 +08:00
|
|
|
"io"
|
2024-05-10 21:40:02 +08:00
|
|
|
"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)
|
|
|
|
}
|
|
|
|
|
2024-05-10 21:40:02 +08:00
|
|
|
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-10 21:40:02 +08:00
|
|
|
|
2024-05-28 22:46:28 +08:00
|
|
|
func (l *logger) SetTimeFormat(format string) {
|
|
|
|
l.Lock()
|
|
|
|
defer l.Unlock()
|
|
|
|
l.timeFormat = format
|
|
|
|
}
|
2024-05-10 21:40:02 +08:00
|
|
|
|
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-10 21:40:02 +08:00
|
|
|
|
2024-05-28 22:46:28 +08:00
|
|
|
if level > LogLevelWarn {
|
|
|
|
l.warn = nilLogger
|
|
|
|
} else {
|
|
|
|
l.warn = normalLogger
|
|
|
|
}
|
2024-05-20 16:11:50 +08:00
|
|
|
|
2024-05-28 22:46:28 +08:00
|
|
|
if level > LogLevelError {
|
|
|
|
l.error = nilLogger
|
|
|
|
} else {
|
|
|
|
l.error = normalLogger
|
|
|
|
}
|
2024-05-20 16:11:50 +08:00
|
|
|
}
|
|
|
|
|
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...)
|
|
|
|
}
|
2024-05-10 21:40:02 +08:00
|
|
|
func Info(msg string, data ...any) {
|
2024-05-28 22:46:28 +08:00
|
|
|
defaultLogger.Info(msg, data...)
|
2024-05-10 21:40:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Warn(msg string, data ...any) {
|
2024-05-28 22:46:28 +08:00
|
|
|
defaultLogger.Warn(msg, data...)
|
2024-05-10 21:40:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Error(msg string, data ...any) {
|
2024-05-28 22:46:28 +08:00
|
|
|
defaultLogger.Error(msg, data...)
|
2024-05-10 21:40:02 +08:00
|
|
|
}
|
2024-05-24 17:27:52 +08:00
|
|
|
|
|
|
|
type WroteLogger interface {
|
|
|
|
Info(msg string, data ...any)
|
|
|
|
}
|