|
|
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...) |
|
|
} |
|
|
|