Merge pull request #1141 from skrashevich/feat-log-terminal-check
feat(logging): add interactive shell detection for console output
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
-17
@@ -4,16 +4,21 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"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
|
||||||
@@ -24,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",
|
|
||||||
TimeFormat: "15:04:05.000",
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
writer = &zerolog.ConsoleWriter{
|
console.PartsOrder = []string{
|
||||||
Out: writer,
|
zerolog.LevelFieldName,
|
||||||
NoColor: format == "text",
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user