Code refactoring after #1141
This commit is contained in:
+1
-1
@@ -119,7 +119,7 @@ func Init() {
|
||||
}
|
||||
|
||||
cfg.Mod = map[string]string{
|
||||
"format": "color",
|
||||
"format": "", // useless, but anyway
|
||||
"level": "info",
|
||||
"output": "stdout", // TODO: change to stderr someday
|
||||
"time": zerolog.TimeFormatUnixMs,
|
||||
|
||||
+27
-18
@@ -4,17 +4,21 @@ import (
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/AlexxIT/go2rtc/pkg/shell"
|
||||
"github.com/mattn/go-isatty"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
var MemoryLog = newBuffer(16)
|
||||
|
||||
// NewLogger support:
|
||||
// - output: empty (only to memory), stderr, stdout
|
||||
// - format: empty (autodetect color support), color, json, text
|
||||
// - time: empty (disable timestamp), UNIXMS, UNIXMICRO, UNIXNANO
|
||||
// - level: disabled, trace, debug, info, warn, error...
|
||||
func NewLogger(config map[string]string) zerolog.Logger {
|
||||
var writer io.Writer
|
||||
|
||||
// support output only to memory
|
||||
switch config["output"] {
|
||||
case "stderr":
|
||||
writer = os.Stderr
|
||||
@@ -25,26 +29,31 @@ func NewLogger(config map[string]string) zerolog.Logger {
|
||||
timeFormat := config["time"]
|
||||
|
||||
if writer != nil {
|
||||
switch format := config["format"]; format {
|
||||
case "color", "text":
|
||||
if format := config["format"]; format != "json" {
|
||||
console := &zerolog.ConsoleWriter{Out: writer}
|
||||
|
||||
switch format {
|
||||
case "text":
|
||||
console.NoColor = true
|
||||
case "color":
|
||||
console.NoColor = false // useless, but anyway
|
||||
default:
|
||||
// autodetection if output support color
|
||||
// go-isatty - dependency for go-colorable - dependency for ConsoleWriter
|
||||
console.NoColor = !isatty.IsTerminal(writer.(*os.File).Fd())
|
||||
}
|
||||
|
||||
if timeFormat != "" {
|
||||
writer = &zerolog.ConsoleWriter{
|
||||
Out: writer,
|
||||
NoColor: format == "text" || !shell.IsInteractive(os.Stdout.Fd()),
|
||||
TimeFormat: "15:04:05.000",
|
||||
}
|
||||
console.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,
|
||||
},
|
||||
console.PartsOrder = []string{
|
||||
zerolog.LevelFieldName,
|
||||
zerolog.CallerFieldName,
|
||||
zerolog.MessageFieldName,
|
||||
}
|
||||
}
|
||||
case "json": // none
|
||||
|
||||
writer = console
|
||||
}
|
||||
|
||||
writer = zerolog.MultiLevelWriter(writer, MemoryLog)
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
//go:build !unix && !windows
|
||||
|
||||
package shell
|
||||
|
||||
func IsInteractive(fd uintptr) bool {
|
||||
return false
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
//go:build unix
|
||||
|
||||
package shell
|
||||
|
||||
import "golang.org/x/sys/unix"
|
||||
|
||||
func IsInteractive(fd uintptr) bool {
|
||||
_, err := unix.IoctlGetTermios(int(fd), unix.TIOCGETA)
|
||||
return err == nil
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
//go:build windows
|
||||
|
||||
package shell
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
var (
|
||||
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
||||
procGetConsoleMode = kernel32.NewProc("GetConsoleMode")
|
||||
)
|
||||
|
||||
func IsInteractive(fd uintptr) bool {
|
||||
var st uint32
|
||||
r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0)
|
||||
return r != 0 && e == 0
|
||||
}
|
||||
Reference in New Issue
Block a user