diff --git a/utils/logger/levelhandler.go b/utils/logger/levelhandler.go new file mode 100644 index 00000000..8be48a80 --- /dev/null +++ b/utils/logger/levelhandler.go @@ -0,0 +1,89 @@ +package logger + +import ( + "image/color" + "strconv" + "strings" + + "go.uber.org/zap/zapcore" +) + +const DeveloperLevel zapcore.Level = -2 + +func ParseLevel(s string) zapcore.Level { + switch strings.ToLower(s) { + case "dev": + return DeveloperLevel + case "debug": + return zapcore.DebugLevel + case "info": + return zapcore.InfoLevel + case "warn": + return zapcore.WarnLevel + case "error": + return zapcore.ErrorLevel + case "fatal": + return zapcore.FatalLevel + default: + return zapcore.InfoLevel + } +} + +func ColorCode(str string, color color.RGBA) string { + return startColor(color) + str + endColor() +} + +func ColorToInt(color color.RGBA) (int, int, int, int) { + r, g, b, a := color.R, color.G, color.B, color.A + + red, green, blue, alpha := int(r), int(g), int(b), int(a) + + return red, green, blue, alpha +} + +func startColor(color color.RGBA) string { + red, green, blue, alpha := ColorToInt(color) + + mode := "38;2;" + + if alpha >= 255 { + mode = "48;2;" + } + + colorStr := strconv.Itoa(red) + ";" + strconv.Itoa(green) + ";" + strconv.Itoa(blue) + + return "\x1b[" + mode + colorStr + "m" +} + +func endColor() string { + return "\x1b[0m" +} + +func LevelString(l zapcore.Level) string { + switch l { + case DeveloperLevel: + return "dev" + default: + return l.CapitalString() + } +} + +func CapitalLevel(l zapcore.Level) string { + switch l { + case DeveloperLevel: + return ColorCode("DEV ", color.RGBA{ + R: 95, G: 175, B: 135, + }) + default: + return l.CapitalString() + } +} + +func CustomEncodeLevel(l zapcore.Level, enc zapcore.PrimitiveArrayEncoder) { + switch l { + case DeveloperLevel: + enc.AppendString(CapitalLevel(l)) + default: + zapcore.CapitalColorLevelEncoder(l, enc) + } +} diff --git a/utils/logger/levels.go b/utils/logger/levels.go index 8be48a80..bf2881e9 100644 --- a/utils/logger/levels.go +++ b/utils/logger/levels.go @@ -1,89 +1,51 @@ package logger -import ( - "image/color" - "strconv" - "strings" +import "go.uber.org/zap/zapcore" - "go.uber.org/zap/zapcore" -) +func Dev(data ...any) { + ok := logger.Check(DeveloperLevel, Format(data...)) -const DeveloperLevel zapcore.Level = -2 - -func ParseLevel(s string) zapcore.Level { - switch strings.ToLower(s) { - case "dev": - return DeveloperLevel - case "debug": - return zapcore.DebugLevel - case "info": - return zapcore.InfoLevel - case "warn": - return zapcore.WarnLevel - case "error": - return zapcore.ErrorLevel - case "fatal": - return zapcore.FatalLevel - default: - return zapcore.InfoLevel + if ok != nil { + ok.Write() } } -func ColorCode(str string, color color.RGBA) string { - return startColor(color) + str + endColor() +func Debug(data ...any) { + logger.Debug(Format(data...)) } -func ColorToInt(color color.RGBA) (int, int, int, int) { - r, g, b, a := color.R, color.G, color.B, color.A - - red, green, blue, alpha := int(r), int(g), int(b), int(a) - - return red, green, blue, alpha +func Info(data ...any) { + logger.Info(Format(data...)) } -func startColor(color color.RGBA) string { - red, green, blue, alpha := ColorToInt(color) - - mode := "38;2;" - - if alpha >= 255 { - mode = "48;2;" - } - - colorStr := strconv.Itoa(red) + ";" + strconv.Itoa(green) + ";" + strconv.Itoa(blue) - - return "\x1b[" + mode + colorStr + "m" +func Warn(data ...any) { + logger.Warn(Format(data...)) } -func endColor() string { - return "\x1b[0m" +func Error(data ...any) { + logger.Error(Format(data...)) } -func LevelString(l zapcore.Level) string { - switch l { - case DeveloperLevel: - return "dev" - default: - return l.CapitalString() - } +func Fatal(data ...any) { + logger.Fatal(Format(data...)) } -func CapitalLevel(l zapcore.Level) string { - switch l { - case DeveloperLevel: - return ColorCode("DEV ", color.RGBA{ - R: 95, G: 175, B: 135, - }) - default: - return l.CapitalString() - } +func IsDev() bool { + return logger.Level().Enabled(DeveloperLevel) } -func CustomEncodeLevel(l zapcore.Level, enc zapcore.PrimitiveArrayEncoder) { - switch l { - case DeveloperLevel: - enc.AppendString(CapitalLevel(l)) - default: - zapcore.CapitalColorLevelEncoder(l, enc) - } +func IsDebug() bool { + return logger.Level().Enabled(zapcore.DebugLevel) +} +func IsInfo() bool { + return logger.Level().Enabled(zapcore.InfoLevel) +} +func IsWarn() bool { + return logger.Level().Enabled(zapcore.WarnLevel) +} +func IsError() bool { + return logger.Level().Enabled(zapcore.ErrorLevel) } +func IsFatal() bool { + return logger.Level().Enabled(zapcore.FatalLevel) +} \ No newline at end of file diff --git a/utils/logger/logger.go b/utils/logger/logger.go index 15dc2745..fe265a72 100644 --- a/utils/logger/logger.go +++ b/utils/logger/logger.go @@ -11,9 +11,10 @@ import ( "go.uber.org/zap/zapcore" ) -var _log *zap.Logger var _logLevel = "" +var logger *zap.Logger + func Init(level string) { _logLevel = strings.ToLower(level) @@ -43,10 +44,10 @@ func Init(level string) { var err error - _log, err = cfg.Build(zap.AddCaller(), zap.AddCallerSkip(1)) + logger, err = cfg.Build(zap.AddCaller(), zap.AddCallerSkip(1)) if err != nil { - fmt.Println("Encountered Error during Log.Init(): ", err.Error()) + fmt.Println("Encountered Error during Logger Init: ", err.Error()) } } @@ -75,37 +76,9 @@ func Format(data ...any) string { } func Level() string { - return LevelString(_log.Level()) -} - -func Info(data ...any) { - _log.Info(Format(data...)) -} - -func Debug(data ...any) { - _log.Debug(Format(data...)) -} - -func Dev(data ...any) { - ok := _log.Check(DeveloperLevel, Format(data...)) - - if ok != nil { - ok.Write() - } -} - -func Error(data ...any) { - _log.Error(Format(data...)) -} - -func Fatal(data ...any) { - _log.Fatal(Format(data...)) -} - -func Warn(data ...any) { - _log.Warn(Format(data...)) + return LevelString(logger.Level()) } func Sync() { - _ = _log.Sync() + logger.Sync() }