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/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
+44 -15
View File
@@ -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 {