package logging import ( "log/slog" "os" "strings" ) func parseLogLevel(levelStr string) slog.Level { switch strings.ToUpper(levelStr) { case "DEBUG": return slog.LevelDebug case "INFO": return slog.LevelInfo case "WARN": return slog.LevelWarn case "ERROR": return slog.LevelError default: return slog.LevelInfo // Default level } } // InitLogggin initializes global structured logging for the entire application func InitLogging(level string) *slog.Logger { // Use os.Stderr // // Stderr is used for diagnostics and logging. Stdout is used for program // output. Stderr also have greater likely hood of being seen if a programs // output is being redirected. parsedLogLevel := parseLogLevel(level) loggerHandler := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: parsedLogLevel, AddSource: true}) logger := slog.New(loggerHandler) slog.SetDefault(logger) return logger }