Merge branch 'master' into feat-log-terminal-check

This commit is contained in:
Sergey Krashevich
2024-05-28 09:15:01 +03:00
committed by GitHub
6 changed files with 595 additions and 41 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": "info",
"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
@@ -9,29 +9,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" || !shell.IsInteractive(os.Stdout.Fd())),
// 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" || !shell.IsInteractive(os.Stdout.Fd()),
TimeFormat: "15:04:05.000",
}
} else {
writer = &zerolog.ConsoleWriter{
Out: writer,
NoColor: format == "text" || !shell.IsInteractive(os.Stdout.Fd()),
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 {