diff --git a/logging/logfile.go b/logging/logfile.go index ff0f324306..2317217500 100644 --- a/logging/logfile.go +++ b/logging/logfile.go @@ -93,23 +93,27 @@ func (l *LogFile) pruneFiles() error { if l.MaxFiles == 0 { return nil } - pattern := l.fileNamePattern() - //get all the files that match the log file pattern - globExpression := filepath.Join(l.logPath, fmt.Sprintf(pattern, "*")) - matches, err := filepath.Glob(globExpression) + + pattern := filepath.Join(l.logPath, fmt.Sprintf(l.fileNamePattern(), "*")) + matches, err := filepath.Glob(pattern) if err != nil { return err } - var stale int - if l.MaxFiles <= -1 { - // Prune everything - stale = len(matches) - } else { - // Prune if there are more files stored than the configured max - stale = len(matches) - l.MaxFiles + + switch { + case l.MaxFiles < 0: + return removeFiles(matches) + case len(matches) < l.MaxFiles: + return nil } - for i := 0; i < stale; i++ { - if err := os.Remove(matches[i]); err != nil { + + last := len(matches) - l.MaxFiles + return removeFiles(matches[:last]) +} + +func removeFiles(files []string) error { + for _, file := range files { + if err := os.Remove(file); err != nil { return err } } diff --git a/logging/logger.go b/logging/logger.go index 0e1292d9ca..dfc05785cf 100644 --- a/logging/logger.go +++ b/logging/logger.go @@ -92,6 +92,9 @@ func Setup(config Config, out io.Writer) (hclog.InterceptLogger, error) { MaxBytes: config.LogRotateBytes, MaxFiles: config.LogRotateMaxFiles, } + if err := logFile.pruneFiles(); err != nil { + return nil, fmt.Errorf("Failed to prune log files: %w", err) + } if err := logFile.openNew(); err != nil { return nil, fmt.Errorf("Failed to setup logging: %w", err) }