From 4534b4d8ca8288a66996a5ed4c24ee0305f282ba Mon Sep 17 00:00:00 2001 From: Alex X Date: Sun, 26 May 2024 21:28:34 +0300 Subject: [PATCH] Add more log customization options --- internal/app/app.go | 10 +++++++- internal/app/log.go | 59 +++++++++++++++++++++++++++++++++------------ 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index 090c023a..3ccb5f44 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -13,6 +13,7 @@ import ( "github.com/AlexxIT/go2rtc/pkg/shell" "github.com/AlexxIT/go2rtc/pkg/yaml" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) @@ -117,9 +118,16 @@ func Init() { Mod map[string]string `yaml:"log"` } + cfg.Mod = map[string]string{ + "format": "color", + "level": zerolog.LevelInfoValue, + "output": "stdout", // TODO: change to stderr someday + "time": zerolog.TimeFormatUnixMs, + } + LoadConfig(&cfg) - log.Logger = NewLogger(cfg.Mod["format"], cfg.Mod["level"]) + log.Logger = NewLogger(cfg.Mod) modules = cfg.Mod diff --git a/internal/app/log.go b/internal/app/log.go index e8d4bc88..c32de685 100644 --- a/internal/app/log.go +++ b/internal/app/log.go @@ -8,29 +8,58 @@ import ( "github.com/rs/zerolog/log" ) -var MemoryLog *circularBuffer +var MemoryLog = newBuffer(16) -func NewLogger(format string, level string) zerolog.Logger { - var writer io.Writer = os.Stdout +func NewLogger(config map[string]string) zerolog.Logger { + var writer io.Writer - if format != "json" { - writer = zerolog.ConsoleWriter{ - Out: writer, TimeFormat: "15:04:05.000", NoColor: format == "text", + // support output only to memory + switch config["output"] { + case "stderr": + writer = os.Stderr + case "stdout": + writer = os.Stdout + } + + timeFormat := config["time"] + + if writer != nil { + switch format := config["format"]; format { + case "color", "text": + if timeFormat != "" { + writer = &zerolog.ConsoleWriter{ + Out: writer, + NoColor: format == "text", + TimeFormat: "15:04:05.000", + } + } else { + writer = &zerolog.ConsoleWriter{ + Out: writer, + NoColor: format == "text", + PartsOrder: []string{ + zerolog.LevelFieldName, + zerolog.CallerFieldName, + zerolog.MessageFieldName, + }, + } + } + case "json": // none } + + writer = zerolog.MultiLevelWriter(writer, MemoryLog) + } else { + writer = MemoryLog } - MemoryLog = newBuffer(16) + logger := zerolog.New(writer) - writer = zerolog.MultiLevelWriter(writer, MemoryLog) - - zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs - - lvl, err := zerolog.ParseLevel(level) - if err != nil || lvl == zerolog.NoLevel { - lvl = zerolog.InfoLevel + if timeFormat != "" { + zerolog.TimeFieldFormat = timeFormat + logger = logger.With().Timestamp().Logger() } - return zerolog.New(writer).With().Timestamp().Logger().Level(lvl) + lvl, _ := zerolog.ParseLevel(config["level"]) + return logger.Level(lvl) } func GetLogger(module string) zerolog.Logger {