You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
2.4 KiB
131 lines
2.4 KiB
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type LogLevel int
|
|
|
|
const (
|
|
DEBUG LogLevel = iota
|
|
INFO
|
|
WARN
|
|
ERROR
|
|
)
|
|
|
|
type Logger struct {
|
|
level LogLevel
|
|
logger *log.Logger
|
|
}
|
|
|
|
var defaultLogger *Logger
|
|
|
|
func init() {
|
|
defaultLogger = New("INFO")
|
|
}
|
|
|
|
// New 创建新的日志记录器
|
|
func New(levelStr string) *Logger {
|
|
level := parseLogLevel(levelStr)
|
|
logger := log.New(os.Stdout, "", 0)
|
|
|
|
return &Logger{
|
|
level: level,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// SetLevel 设置日志级别
|
|
func SetLevel(levelStr string) {
|
|
defaultLogger.level = parseLogLevel(levelStr)
|
|
}
|
|
|
|
func parseLogLevel(levelStr string) LogLevel {
|
|
switch strings.ToUpper(levelStr) {
|
|
case "DEBUG":
|
|
return DEBUG
|
|
case "INFO":
|
|
return INFO
|
|
case "WARN", "WARNING":
|
|
return WARN
|
|
case "ERROR":
|
|
return ERROR
|
|
default:
|
|
return INFO
|
|
}
|
|
}
|
|
|
|
func (l *Logger) log(level LogLevel, format string, args ...interface{}) {
|
|
if level < l.level {
|
|
return
|
|
}
|
|
|
|
levelStr := ""
|
|
levelColor := ""
|
|
resetColor := "\033[0m"
|
|
|
|
switch level {
|
|
case DEBUG:
|
|
levelStr = "DEBUG"
|
|
levelColor = "\033[36m" // Cyan
|
|
case INFO:
|
|
levelStr = "INFO"
|
|
levelColor = "\033[32m" // Green
|
|
case WARN:
|
|
levelStr = "WARN"
|
|
levelColor = "\033[33m" // Yellow
|
|
case ERROR:
|
|
levelStr = "ERROR"
|
|
levelColor = "\033[31m" // Red
|
|
}
|
|
|
|
timestamp := time.Now().Format("2006-01-02T15:04:05.000Z07:00")
|
|
message := fmt.Sprintf(format, args...)
|
|
|
|
// 结构化日志格式,类似logrus但保持简洁
|
|
logLine := fmt.Sprintf("%s[%s%s%s] [wormhole-client] %s",
|
|
timestamp, levelColor, levelStr, resetColor, message)
|
|
|
|
l.logger.Println(logLine)
|
|
}
|
|
|
|
// Debug 调试日志
|
|
func (l *Logger) Debug(format string, args ...interface{}) {
|
|
l.log(DEBUG, format, args...)
|
|
}
|
|
|
|
// Info 信息日志
|
|
func (l *Logger) Info(format string, args ...interface{}) {
|
|
l.log(INFO, format, args...)
|
|
}
|
|
|
|
// Warn 警告日志
|
|
func (l *Logger) Warn(format string, args ...interface{}) {
|
|
l.log(WARN, format, args...)
|
|
}
|
|
|
|
// Error 错误日志
|
|
func (l *Logger) Error(format string, args ...interface{}) {
|
|
l.log(ERROR, format, args...)
|
|
}
|
|
|
|
// 全局日志函数
|
|
func Debug(format string, args ...interface{}) {
|
|
defaultLogger.Debug(format, args...)
|
|
}
|
|
|
|
func Info(format string, args ...interface{}) {
|
|
defaultLogger.Info(format, args...)
|
|
}
|
|
|
|
func Warn(format string, args ...interface{}) {
|
|
defaultLogger.Warn(format, args...)
|
|
}
|
|
|
|
func Error(format string, args ...interface{}) {
|
|
defaultLogger.Error(format, args...)
|
|
}
|
|
|