func New()

in pkg/berglas/logging/logging.go [60:90]


func New(w io.Writer, logLevel, logFormat string, debug bool) (*slog.Logger, error) {
	opts := &slog.HandlerOptions{
		ReplaceAttr: cloudLoggingAttrsEncoder(),
	}

	level, err := LookupLevel(logLevel)
	if err != nil {
		return nil, fmt.Errorf("invalid value %q for log level: %w", logLevel, err)
	}

	format, err := LookupFormat(logFormat)
	if err != nil {
		return nil, fmt.Errorf("invalid value %q for log format: %w", logFormat, err)
	}

	// Enable the most detailed log level and add source information in debug
	// mode.
	if debug {
		opts.AddSource = true
		level = math.MinInt
	}

	switch format {
	case FormatJSON:
		return slog.New(NewLevelHandler(level, slog.NewJSONHandler(w, opts))), nil
	case FormatText:
		return slog.New(NewLevelHandler(level, slog.NewTextHandler(w, opts))), nil
	default:
		return nil, fmt.Errorf("unknown log format %q", format)
	}
}