Add more log customization options

This commit is contained in:
Alex X
2024-05-26 21:28:34 +03:00
parent 8e571a66e3
commit 4534b4d8ca
2 changed files with 53 additions and 16 deletions
+9 -1
View File
@@ -13,6 +13,7 @@ import (
"github.com/AlexxIT/go2rtc/pkg/shell" "github.com/AlexxIT/go2rtc/pkg/shell"
"github.com/AlexxIT/go2rtc/pkg/yaml" "github.com/AlexxIT/go2rtc/pkg/yaml"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
@@ -117,9 +118,16 @@ func Init() {
Mod map[string]string `yaml:"log"` 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) LoadConfig(&cfg)
log.Logger = NewLogger(cfg.Mod["format"], cfg.Mod["level"]) log.Logger = NewLogger(cfg.Mod)
modules = cfg.Mod modules = cfg.Mod
+44 -15
View File
@@ -8,29 +8,58 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
var MemoryLog *circularBuffer var MemoryLog = newBuffer(16)
func NewLogger(format string, level string) zerolog.Logger { func NewLogger(config map[string]string) zerolog.Logger {
var writer io.Writer = os.Stdout var writer io.Writer
if format != "json" { // support output only to memory
writer = zerolog.ConsoleWriter{ switch config["output"] {
Out: writer, TimeFormat: "15:04:05.000", NoColor: format == "text", 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) if timeFormat != "" {
zerolog.TimeFieldFormat = timeFormat
zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs logger = logger.With().Timestamp().Logger()
lvl, err := zerolog.ParseLevel(level)
if err != nil || lvl == zerolog.NoLevel {
lvl = zerolog.InfoLevel
} }
return zerolog.New(writer).With().Timestamp().Logger().Level(lvl) lvl, _ := zerolog.ParseLevel(config["level"])
return logger.Level(lvl)
} }
func GetLogger(module string) zerolog.Logger { func GetLogger(module string) zerolog.Logger {