diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index cef1a9325..04e232266 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -136,12 +136,37 @@ func NewServer(config *csconfig.LocalApiServerCfg) (*APIServer, error) { /*Configure logs*/ if logFile != "" { + _maxsize := 500 + if config.LogMaxSize != 0 { + _maxsize = config.LogMaxSize + } + _maxfiles := 3 + if config.LogMaxFiles != 0 { + _maxfiles = config.LogMaxFiles + } + _maxage := 28 + if config.LogMaxAge != 0 { + _maxage = config.LogMaxAge + } + _compress := true + if config.CompressLogs != nil { + _compress = *config.CompressLogs + } + /*cf. https://github.com/natefinch/lumberjack/issues/82 + let's create the file beforehand w/ the right perms */ + // check if file exists + _, err := os.Stat(logFile) + // create file if not exists, purposefully ignore errors + if os.IsNotExist(err) { + file, _ := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE, 0600) + file.Close() + } LogOutput := &lumberjack.Logger{ Filename: logFile, - MaxSize: 500, //megabytes - MaxBackups: 3, - MaxAge: 28, //days - Compress: true, //disabled by default + MaxSize: _maxsize, //megabytes + MaxBackups: _maxfiles, + MaxAge: _maxage, //days + Compress: _compress, //disabled by default } clog.SetOutput(LogOutput) } diff --git a/pkg/apiserver/apiserver_test.go b/pkg/apiserver/apiserver_test.go index 9531c6a45..22e2bde1a 100644 --- a/pkg/apiserver/apiserver_test.go +++ b/pkg/apiserver/apiserver_test.go @@ -368,9 +368,9 @@ func TestLoggingErrorToFileConfig(t *testing.T) { time.Sleep(500 * time.Millisecond) //check file content - _, err = ioutil.ReadFile(expectedFile) - if err == nil { - t.Fatalf("file should be empty") + x, err := ioutil.ReadFile(expectedFile) + if err == nil && len(x) > 0 { + t.Fatalf("file should be empty, got '%s'", x) } os.Remove("./crowdsec.log") diff --git a/pkg/types/utils.go b/pkg/types/utils.go index 13782c807..9c7c7774a 100644 --- a/pkg/types/utils.go +++ b/pkg/types/utils.go @@ -42,9 +42,19 @@ func SetDefaultLoggerConfig(cfgMode string, cfgFolder string, cfgLevel log.Level if compress != nil { _compress = *compress } + /*cf. https://github.com/natefinch/lumberjack/issues/82 + let's create the file beforehand w/ the right perms */ + fname := cfgFolder + "/crowdsec.log" + // check if file exists + _, err := os.Stat(fname) + // create file if not exists, purposefully ignore errors + if os.IsNotExist(err) { + file, _ := os.OpenFile(fname, os.O_RDWR|os.O_CREATE, 0600) + file.Close() + } LogOutput = &lumberjack.Logger{ - Filename: cfgFolder + "/crowdsec.log", + Filename: fname, MaxSize: _maxsize, MaxBackups: _maxfiles, MaxAge: _maxage,