// Package log provides structured logging functionality. package log import ( "log/slog" "os" "strings" "git.eeqj.de/sneak/ipapi/internal/config" ) // New creates a new logger instance based on configuration. func New(cfg *config.Config) *slog.Logger { var level slog.Level switch strings.ToLower(cfg.LogLevel) { case "debug": level = slog.LevelDebug case "info": level = slog.LevelInfo case "warn", "warning": level = slog.LevelWarn case "error": level = slog.LevelError default: level = slog.LevelInfo } opts := &slog.HandlerOptions{ Level: level, } var handler slog.Handler if isTerminal() { handler = slog.NewTextHandler(os.Stdout, opts) } else { handler = slog.NewJSONHandler(os.Stdout, opts) } return slog.New(handler) } func isTerminal() bool { fileInfo, err := os.Stdout.Stat() if err != nil { return false } return (fileInfo.Mode() & os.ModeCharDevice) != 0 }