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.
 
 
 

121 lines
2.1 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 := ""
switch level {
case DEBUG:
levelStr = "DEBUG"
case INFO:
levelStr = "INFO"
case WARN:
levelStr = "WARN"
case ERROR:
levelStr = "ERROR"
}
timestamp := time.Now().Format("2006-01-02 15:04:05")
message := fmt.Sprintf(format, args...)
logLine := fmt.Sprintf("[%s] [%s] %s", timestamp, levelStr, 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...)
}