diff --git a/util/log.go b/util/log.go index 4bce75e4adc..7a9235ee6d6 100644 --- a/util/log.go +++ b/util/log.go @@ -5,6 +5,7 @@ import ( "os" "path/filepath" "slices" + "strconv" log "github.com/sirupsen/logrus" "gopkg.in/natefinch/lumberjack.v2" @@ -12,6 +13,8 @@ import ( "github.com/netbirdio/netbird/formatter" ) +const defaultLogSize = 5 + // InitLog parses and sets log-level input func InitLog(logLevel string, logPath string) error { level, err := log.ParseLevel(logLevel) @@ -19,13 +22,14 @@ func InitLog(logLevel string, logPath string) error { log.Errorf("Failed parsing log-level %s: %s", logLevel, err) return err } - customOutputs := []string{"console", "syslog"}; + customOutputs := []string{"console", "syslog"} if logPath != "" && !slices.Contains(customOutputs, logPath) { + maxLogSize := getLogMaxSize() lumberjackLogger := &lumberjack.Logger{ // Log file absolute path, os agnostic Filename: filepath.ToSlash(logPath), - MaxSize: 5, // MB + MaxSize: maxLogSize, // MB MaxBackups: 10, MaxAge: 30, // days Compress: true, @@ -46,3 +50,18 @@ func InitLog(logLevel string, logPath string) error { log.SetLevel(level) return nil } + +func getLogMaxSize() int { + if sizeVar, ok := os.LookupEnv("NB_LOG_MAX_SIZE_MB"); ok { + size, err := strconv.ParseInt(sizeVar, 10, 64) + if err != nil { + log.Errorf("Failed parsing log-size %s: %s. Should be just an integer", sizeVar, err) + return defaultLogSize + } + + log.Infof("Setting log file max size to %d MB", size) + + return int(size) + } + return defaultLogSize +}