diff --git a/cmd/crowdsec/main.go b/cmd/crowdsec/main.go index 30b83a794..9f43eee43 100644 --- a/cmd/crowdsec/main.go +++ b/cmd/crowdsec/main.go @@ -295,7 +295,8 @@ func main() { log.Fatalf(err.Error()) } // Configure logging - if err = types.SetDefaultLoggerConfig(cConfig.Common.LogMedia, cConfig.Common.LogDir, *cConfig.Common.LogLevel); err != nil { + if err = types.SetDefaultLoggerConfig(cConfig.Common.LogMedia, cConfig.Common.LogDir, *cConfig.Common.LogLevel, + cConfig.Common.LogMaxSize, cConfig.Common.LogMaxFiles, cConfig.Common.LogMaxAge, cConfig.Common.CompressLogs); err != nil { log.Fatal(err.Error()) } diff --git a/cmd/crowdsec/serve.go b/cmd/crowdsec/serve.go index 1e91e6a33..e3c70864c 100644 --- a/cmd/crowdsec/serve.go +++ b/cmd/crowdsec/serve.go @@ -60,7 +60,8 @@ func reloadHandler(sig os.Signal, cConfig *csconfig.Config) error { log.Fatalf(err.Error()) } // Configure logging - if err = types.SetDefaultLoggerConfig(cConfig.Common.LogMedia, cConfig.Common.LogDir, *cConfig.Common.LogLevel); err != nil { + if err = types.SetDefaultLoggerConfig(cConfig.Common.LogMedia, cConfig.Common.LogDir, *cConfig.Common.LogLevel, + cConfig.Common.LogMaxSize, cConfig.Common.LogMaxFiles, cConfig.Common.LogMaxAge, cConfig.Common.CompressLogs); err != nil { log.Fatal(err.Error()) } diff --git a/pkg/apiserver/apiserver_test.go b/pkg/apiserver/apiserver_test.go index 8881b49ed..927f118f2 100644 --- a/pkg/apiserver/apiserver_test.go +++ b/pkg/apiserver/apiserver_test.go @@ -275,7 +275,7 @@ func TestLoggingDebugToFileConfig(t *testing.T) { os.Remove(expectedFile) // Configure logging - if err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, *cfg.LogLevel); err != nil { + if err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, *cfg.LogLevel, cfg.LogMaxSize, cfg.LogMaxFiles, cfg.LogMaxAge, cfg.CompressLogs); err != nil { t.Fatal(err.Error()) } api, err := NewServer(&cfg) @@ -337,7 +337,7 @@ func TestLoggingErrorToFileConfig(t *testing.T) { os.Remove(expectedFile) // Configure logging - if err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, *cfg.LogLevel); err != nil { + if err := types.SetDefaultLoggerConfig(cfg.LogMedia, cfg.LogDir, *cfg.LogLevel, cfg.LogMaxSize, cfg.LogMaxFiles, cfg.LogMaxAge, cfg.CompressLogs); err != nil { t.Fatal(err.Error()) } api, err := NewServer(&cfg) diff --git a/pkg/csconfig/api.go b/pkg/csconfig/api.go index 7862cd7a4..73da963b5 100644 --- a/pkg/csconfig/api.go +++ b/pkg/csconfig/api.go @@ -88,6 +88,10 @@ type LocalApiServerCfg struct { Profiles []*ProfileCfg `yaml:"-"` LogLevel *log.Level `yaml:"log_level"` UseForwardedForHeaders bool `yaml:"use_forwarded_for_headers,omitempty"` + CompressLogs *bool `yaml:"-"` + LogMaxSize int `yaml:"-"` + LogMaxAge int `yaml:"-"` + LogMaxFiles int `yaml:"-"` } type TLSCfg struct { @@ -102,6 +106,11 @@ func (c *Config) LoadAPIServer() error { } c.API.Server.LogDir = c.Common.LogDir c.API.Server.LogMedia = c.Common.LogMedia + c.API.Server.CompressLogs = c.Common.CompressLogs + c.API.Server.LogMaxSize = c.Common.LogMaxSize + c.API.Server.LogMaxAge = c.Common.LogMaxAge + c.API.Server.LogMaxFiles = c.Common.LogMaxFiles + if err := c.API.Server.LoadProfiles(); err != nil { return errors.Wrap(err, "while loading profiles for LAPI") } diff --git a/pkg/csconfig/common.go b/pkg/csconfig/common.go index f5eee8a8c..4f53e08d6 100644 --- a/pkg/csconfig/common.go +++ b/pkg/csconfig/common.go @@ -10,12 +10,16 @@ import ( /*daemonization/service related stuff*/ type CommonCfg struct { - Daemonize bool - PidDir string `yaml:"pid_dir"` - LogMedia string `yaml:"log_media"` - LogDir string `yaml:"log_dir,omitempty"` //if LogMedia = file - LogLevel *log.Level `yaml:"log_level"` - WorkingDir string `yaml:"working_dir,omitempty"` ///var/run + Daemonize bool + PidDir string `yaml:"pid_dir"` + LogMedia string `yaml:"log_media"` + LogDir string `yaml:"log_dir,omitempty"` //if LogMedia = file + LogLevel *log.Level `yaml:"log_level"` + WorkingDir string `yaml:"working_dir,omitempty"` ///var/run + CompressLogs *bool `yaml:"compress_logs,omitempty"` + LogMaxSize int `yaml:"log_max_size,omitempty"` + LogMaxAge int `yaml:"log_max_age,omitempty"` + LogMaxFiles int `yaml:"log_max_files,omitempty"` } func (c *Config) LoadCommon() error { diff --git a/pkg/types/utils.go b/pkg/types/utils.go index 9c5b1d1e0..d6dd45a33 100644 --- a/pkg/types/utils.go +++ b/pkg/types/utils.go @@ -22,16 +22,33 @@ var logFormatter log.Formatter var LogOutput *lumberjack.Logger //io.Writer var logLevel log.Level -func SetDefaultLoggerConfig(cfgMode string, cfgFolder string, cfgLevel log.Level) error { +func SetDefaultLoggerConfig(cfgMode string, cfgFolder string, cfgLevel log.Level, maxSize int, maxFiles int, maxAge int, compress *bool) error { /*Configure logs*/ if cfgMode == "file" { + _maxsize := 500 + if maxSize != 0 { + _maxsize = maxSize + } + _maxfiles := 3 + if maxFiles != 0 { + _maxfiles = maxFiles + } + _maxage := 28 + if maxAge != 0 { + _maxage = maxAge + } + _compress := true + if compress != nil { + _compress = *compress + } + LogOutput = &lumberjack.Logger{ Filename: cfgFolder + "/crowdsec.log", - MaxSize: 500, //megabytes - MaxBackups: 3, - MaxAge: 28, //days - Compress: true, //disabled by default + MaxSize: _maxsize, + MaxBackups: _maxfiles, + MaxAge: _maxage, + Compress: _compress, } log.SetOutput(LogOutput) } else if cfgMode != "stdout" {