package logger import ( "io" "log/slog" "os" "strings" ) func Init() { levelStr := strings.ToLower(os.Getenv("LOG_LEVEL")) var level slog.Level switch levelStr { case "debug": level = slog.LevelDebug case "warn": level = slog.LevelWarn case "error": level = slog.LevelError default: level = slog.LevelInfo } file, err := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666) var writer io.Writer = os.Stdout if err != nil { slog.Error("Error to create log file", "err", err) } else { writer = io.MultiWriter(os.Stdout, file) } opts := &slog.HandlerOptions{ Level: level, AddSource: true, ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr { if a.Key == slog.TimeKey { return slog.String(a.Key, a.Value.Time().Format("2006-01-02 15:04:05")) } return a }, } handler := slog.NewJSONHandler(writer, opts) logger := slog.New(handler) slog.SetDefault(logger) }