package logger import ( "fmt" "github.com/getsentry/sentry-go" "os" ) var ( colorsTags = map[string]string{ "Reset": "\033[0m", "Bright": "\033[1m", "Dim": "\033[2m", "Underscore": "\033[4m", "Blink": "\033[5m", "Reverse": "\033[7m", "Hidden": "\033[8m", "FgBlack": "\033[30m", "FgRed": "\033[31m", "FgGreen": "\033[32m", "FgYellow": "\033[33m", "FgBlue": "\033[34m", "FgMagenta": "\033[35m", "FgCyan": "\033[36m", "FgWhite": "\033[37m", "FgGray": "\033[90m", "BgBlack": "\033[40m", "BgRed": "\033[41m", "BgGreen": "\033[42m", "BgYellow": "\033[43m", "BgBlue": "\033[44m", "BgMagenta": "\033[45m", "BgCyan": "\033[46m", "BgWhite": "\033[47m", "BgGray": "\033[100m", } ) type Logger struct { sentryEnabled bool } func NewLogger() *Logger { logger := &Logger{} if env := os.Getenv("SENTRY_ENVIRONMENT"); env != "" { err := sentry.Init(sentry.ClientOptions{ Dsn: "https://7698f4c6119546638794f11e26ee11e9@sentry.sis.ski/11", Environment: env, TracesSampleRate: 1.0, }) if err != nil { fmt.Printf("Sentry initialization failed: %v\n", err) } else { logger.sentryEnabled = true } } return logger } func (l *Logger) Info(message string) { fmt.Printf("%sINFO%s: %s%s\n", colorsTags["BgWhite"]+colorsTags["FgBlack"], colorsTags["Reset"], message, colorsTags["Reset"]) } func (l *Logger) Debug(message string) { fmt.Printf("%sDEBUG%s: %s%s\n", colorsTags["BgBlue"], colorsTags["Reset"], message, colorsTags["Reset"]) } func (l *Logger) Fatal(message string) { fmt.Printf("%sFATAL%s: %s%s%s%s%s%s%s\n", colorsTags["Blink"]+colorsTags["BgRed"], colorsTags["Reset"], colorsTags["Bright"], colorsTags["FgMagenta"], message, colorsTags["Reset"], colorsTags["Reset"], colorsTags["Reset"]) if l.sentryEnabled { sentry.ConfigureScope(func(scope *sentry.Scope) { scope.SetLevel(sentry.LevelFatal) }) sentry.CaptureMessage(message) } } func (l *Logger) Error(message string) { fmt.Printf("%sERROR%s: %s%s%s\n", colorsTags["BgRed"], colorsTags["Reset"], colorsTags["FgRed"], message, colorsTags["Reset"]) if l.sentryEnabled { sentry.ConfigureScope(func(scope *sentry.Scope) { scope.SetLevel(sentry.LevelError) }) sentry.CaptureMessage(message) } } func (l *Logger) Critical(message string) { fmt.Printf("%sCRITICAL%s: %s%s%s%s%s\n", colorsTags["Blink"]+colorsTags["BgRed"], colorsTags["Reset"], colorsTags["FgMagenta"], message, colorsTags["Reset"], colorsTags["Reset"], colorsTags["Reset"]) if l.sentryEnabled { sentry.ConfigureScope(func(scope *sentry.Scope) { scope.SetLevel("critical") }) sentry.CaptureMessage(message) } } func (l *Logger) Warning(message string) { fmt.Printf("%sWARN%s: %s%s\n", colorsTags["BgYellow"]+colorsTags["FgBlack"], colorsTags["Reset"], message, colorsTags["Reset"]) if l.sentryEnabled { sentry.ConfigureScope(func(scope *sentry.Scope) { scope.SetLevel(sentry.LevelWarning) }) sentry.CaptureMessage(message) } } func (l *Logger) Log(message string) { fmt.Println(message) sentry.ConfigureScope(func(scope *sentry.Scope) { scope.SetLevel("log") }) sentry.CaptureMessage(message) }