This repository has been archived on 2026-07-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
codespace/pkg/logger/logger.go
T
2026-07-02 16:34:42 +08:00

50 lines
1.0 KiB
Go

package logger
import (
"fmt"
"log/slog"
"os"
"strings"
"codespace/pkg/config"
)
// New creates a *slog.Logger from the given log configuration.
// It also sets the logger as the default slog logger.
func New(cfg config.LogConfig) (*slog.Logger, error) {
level, err := parseLevel(cfg.Level)
if err != nil {
return nil, err
}
opts := &slog.HandlerOptions{Level: level}
var handler slog.Handler
switch strings.ToLower(cfg.Format) {
case "json", "":
handler = slog.NewJSONHandler(os.Stdout, opts)
case "text":
handler = slog.NewTextHandler(os.Stdout, opts)
default:
return nil, fmt.Errorf("invalid log format %q", cfg.Format)
}
lg := slog.New(handler)
slog.SetDefault(lg)
return lg, nil
}
func parseLevel(value string) (slog.Level, error) {
switch strings.ToLower(value) {
case "debug":
return slog.LevelDebug, nil
case "info", "":
return slog.LevelInfo, nil
case "warn":
return slog.LevelWarn, nil
case "error":
return slog.LevelError, nil
default:
return slog.LevelInfo, fmt.Errorf("invalid log level %q", value)
}
}