Code refactoring after #1141
This commit is contained in:
+1
-1
@@ -119,7 +119,7 @@ func Init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cfg.Mod = map[string]string{
|
cfg.Mod = map[string]string{
|
||||||
"format": "color",
|
"format": "", // useless, but anyway
|
||||||
"level": "info",
|
"level": "info",
|
||||||
"output": "stdout", // TODO: change to stderr someday
|
"output": "stdout", // TODO: change to stderr someday
|
||||||
"time": zerolog.TimeFormatUnixMs,
|
"time": zerolog.TimeFormatUnixMs,
|
||||||
|
|||||||
+27
-18
@@ -4,17 +4,21 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/AlexxIT/go2rtc/pkg/shell"
|
"github.com/mattn/go-isatty"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var MemoryLog = newBuffer(16)
|
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 {
|
func NewLogger(config map[string]string) zerolog.Logger {
|
||||||
var writer io.Writer
|
var writer io.Writer
|
||||||
|
|
||||||
// support output only to memory
|
|
||||||
switch config["output"] {
|
switch config["output"] {
|
||||||
case "stderr":
|
case "stderr":
|
||||||
writer = os.Stderr
|
writer = os.Stderr
|
||||||
@@ -25,26 +29,31 @@ func NewLogger(config map[string]string) zerolog.Logger {
|
|||||||
timeFormat := config["time"]
|
timeFormat := config["time"]
|
||||||
|
|
||||||
if writer != nil {
|
if writer != nil {
|
||||||
switch format := config["format"]; format {
|
if format := config["format"]; format != "json" {
|
||||||
case "color", "text":
|
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 != "" {
|
if timeFormat != "" {
|
||||||
writer = &zerolog.ConsoleWriter{
|
console.TimeFormat = "15:04:05.000"
|
||||||
Out: writer,
|
|
||||||
NoColor: format == "text" || !shell.IsInteractive(os.Stdout.Fd()),
|
|
||||||
TimeFormat: "15:04:05.000",
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
writer = &zerolog.ConsoleWriter{
|
console.PartsOrder = []string{
|
||||||
Out: writer,
|
zerolog.LevelFieldName,
|
||||||
NoColor: format == "text" || !shell.IsInteractive(os.Stdout.Fd()),
|
zerolog.CallerFieldName,
|
||||||
PartsOrder: []string{
|
zerolog.MessageFieldName,
|
||||||
zerolog.LevelFieldName,
|
|
||||||
zerolog.CallerFieldName,
|
|
||||||
zerolog.MessageFieldName,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "json": // none
|
|
||||||
|
writer = console
|
||||||
}
|
}
|
||||||
|
|
||||||
writer = zerolog.MultiLevelWriter(writer, MemoryLog)
|
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