From 00c0162a97f22c561ae22c1f0dfbfb34edfac191 Mon Sep 17 00:00:00 2001 From: YuYang Date: Thu, 30 Nov 2023 14:38:55 +0800 Subject: [PATCH] support file log --- core.go | 2 +- go.mod | 2 +- log/log.go | 32 ++++++++++++++++++++++++-------- types/config.go | 12 +++++++++++- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/core.go b/core.go index c2853686c..b326d2542 100644 --- a/core.go +++ b/core.go @@ -41,7 +41,7 @@ func serve(c *cli.Context) error { zerolog.Fatal().Err(err).Send() } - if err := log.SetupLog(c.Context, config.LogLevel, config.SentryDSN); err != nil { + if err := log.SetupLog(c.Context, &config.Log, config.SentryDSN); err != nil { zerolog.Fatal().Err(err).Send() } defer log.SentryDefer() diff --git a/go.mod b/go.mod index a807ac65e..de7e6df9e 100644 --- a/go.mod +++ b/go.mod @@ -44,6 +44,7 @@ require ( golang.org/x/sync v0.1.0 google.golang.org/grpc v1.54.1 google.golang.org/protobuf v1.30.0 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 ) require ( @@ -142,7 +143,6 @@ require ( golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.8.0 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/log/log.go b/log/log.go index eda052faa..073e7042e 100644 --- a/log/log.go +++ b/log/log.go @@ -2,12 +2,15 @@ package log import ( "context" + "io" "os" "strings" "time" "github.com/cockroachdb/errors" "github.com/getsentry/sentry-go" + "github.com/projecteru2/core/types" + "gopkg.in/natefinch/lumberjack.v2" "github.com/rs/zerolog" ) @@ -18,17 +21,30 @@ var ( ) // SetupLog init logger -func SetupLog(ctx context.Context, l, dsn string) error { - level, err := zerolog.ParseLevel(strings.ToLower(l)) +func SetupLog(ctx context.Context, cfg *types.ServerLogConfig, dsn string) error { + level, err := zerolog.ParseLevel(strings.ToLower(cfg.Level)) if err != nil { return err } - // TODO can use file - rslog := zerolog.New( - zerolog.ConsoleWriter{ - Out: os.Stdout, - TimeFormat: time.RFC822, - }).With().Timestamp().Logger() + + var writer io.Writer = os.Stdout + if cfg.Filename != "" { + // file log always use json format + writer = &lumberjack.Logger{ + Filename: cfg.Filename, + MaxBackups: cfg.MaxBackups, // files + MaxSize: cfg.MaxSize, // megabytes + MaxAge: cfg.MaxAge, // days + } + } else { //nolint + if !cfg.UseJSON { + writer = zerolog.ConsoleWriter{ + Out: writer, + TimeFormat: time.RFC822, + } + } + } + rslog := zerolog.New(writer).With().Timestamp().Logger() rslog.Level(level) zerolog.ErrorStackMarshaler = func(err error) any { return errors.GetSafeDetails(err).SafeDetails diff --git a/types/config.go b/types/config.go index bc0750be2..bcca8922a 100644 --- a/types/config.go +++ b/types/config.go @@ -17,7 +17,6 @@ const ( // Config holds eru-core config type Config struct { - LogLevel string `yaml:"log_level" required:"true" default:"INFO"` Bind string `yaml:"bind" required:"true" default:"5001"` // HTTP API address LockTimeout time.Duration `yaml:"lock_timeout" required:"true" default:"30s"` // timeout for lock (ttl) GlobalTimeout time.Duration `yaml:"global_timeout" required:"true" default:"300s"` // timeout for remove, run_and_wait and build, in second @@ -44,6 +43,7 @@ type Config struct { Systemd SystemdConfig `yaml:"systemd"` Scheduler SchedulerConfig `yaml:"scheduler"` ResourcePlugin ResourcePluginConfig `yaml:"resource_plugin"` + Log ServerLogConfig `yaml:"log"` } // Identifier returns the ID of this config @@ -144,3 +144,13 @@ type LogConfig struct { Type string `yaml:"type" required:"true" default:"journald"` // Log type, can be "journald", "json-file", "none" Config map[string]string `yaml:"config"` // Log configs } + +type ServerLogConfig struct { + Level string `yaml:"level" default:"info"` + UseJSON bool `yaml:"use_json"` + // for file log + Filename string `yaml:"filename"` + MaxSize int `yaml:"maxsize" default:"500"` + MaxAge int `yaml:"max_age" default:"28"` + MaxBackups int `yaml:"max_backups" default:"3"` +}