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