package logging import ( "fmt" "io" "os" "path/filepath" "time" log "github.com/sirupsen/logrus" ) // SetupLogging ensures the log directory, opens the rotating log writer, and configures logrus. func SetupLogging(logDir, serviceName, buildVersion string) (io.WriteCloser, error) { if err := os.MkdirAll(logDir, 0o755); err != nil { return nil, fmt.Errorf("create log directory: %w", err) } fileName := filepath.Join(logDir, serviceName+".log") f, err := newWeeklyLogWriter(fileName, time.Local, defaultWeeklyLogRuntime()) if err != nil { return nil, fmt.Errorf("open log file: %w", err) } log.SetOutput(f) log.SetFormatter(&log.JSONFormatter{ TimestampFormat: time.RFC3339, }) log.SetLevel(log.InfoLevel) log.WithFields(log.Fields{ "buildVersion": buildVersion, }).Info("Logging initialized") return f, nil }