|
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
|
|
const (
|
|
DEBUG = iota
|
|
INFO
|
|
WARN
|
|
ERROR
|
|
FATAL
|
|
)
|
|
|
|
var levelNames = map[int]string{
|
|
DEBUG: "DEBUG",
|
|
INFO: "INFO",
|
|
WARN: "WARN",
|
|
ERROR: "ERROR",
|
|
FATAL: "FATAL",
|
|
}
|
|
|
|
var levelColors = map[int]func(format string, a ...interface{}) string{
|
|
DEBUG: color.BlueString,
|
|
INFO: color.GreenString,
|
|
WARN: color.YellowString,
|
|
ERROR: color.RedString,
|
|
FATAL: color.New(color.FgHiRed, color.Bold).SprintfFunc(),
|
|
}
|
|
|
|
|
|
var logLevel = INFO
|
|
|
|
|
|
func SetLevel(level int) {
|
|
if level >= DEBUG && level <= FATAL {
|
|
logLevel = level
|
|
}
|
|
}
|
|
|
|
|
|
func GetLevel() int {
|
|
return logLevel
|
|
}
|
|
|
|
|
|
func GetLevelName(level int) string {
|
|
if name, ok := levelNames[level]; ok {
|
|
return name
|
|
}
|
|
return "UNKNOWN"
|
|
}
|
|
|
|
|
|
func log(level int, format string, args ...interface{}) {
|
|
if level < logLevel {
|
|
return
|
|
}
|
|
|
|
now := time.Now().Format("2006-01-02 15:04:05.000")
|
|
levelName := levelNames[level]
|
|
colorFunc := levelColors[level]
|
|
|
|
logContent := fmt.Sprintf(format, args...)
|
|
logPrefix := fmt.Sprintf("[%s] [%s] ", now, levelName)
|
|
|
|
|
|
fmt.Fprintf(os.Stdout, "%s%s\n", logPrefix, colorFunc(logContent))
|
|
|
|
|
|
if level == FATAL {
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
|
|
func Debug(format string, args ...interface{}) {
|
|
log(DEBUG, format, args...)
|
|
}
|
|
|
|
|
|
func Info(format string, args ...interface{}) {
|
|
log(INFO, format, args...)
|
|
}
|
|
|
|
|
|
func Warn(format string, args ...interface{}) {
|
|
log(WARN, format, args...)
|
|
}
|
|
|
|
|
|
func Error(format string, args ...interface{}) {
|
|
log(ERROR, format, args...)
|
|
}
|
|
|
|
|
|
func Fatal(format string, args ...interface{}) {
|
|
log(FATAL, format, args...)
|
|
}
|
|
|