@@ -4,16 +4,21 @@ import (
4
4
"io"
5
5
"os"
6
6
7
+ "github.com/mattn/go-isatty"
7
8
"github.com/rs/zerolog"
8
9
"github.com/rs/zerolog/log"
9
10
)
10
11
11
12
var MemoryLog = newBuffer (16 )
12
13
14
+ // NewLogger support:
15
+ // - output: empty (only to memory), stderr, stdout
16
+ // - format: empty (autodetect color support), color, json, text
17
+ // - time: empty (disable timestamp), UNIXMS, UNIXMICRO, UNIXNANO
18
+ // - level: disabled, trace, debug, info, warn, error...
13
19
func NewLogger (config map [string ]string ) zerolog.Logger {
14
20
var writer io.Writer
15
21
16
- // support output only to memory
17
22
switch config ["output" ] {
18
23
case "stderr" :
19
24
writer = os .Stderr
@@ -24,26 +29,31 @@ func NewLogger(config map[string]string) zerolog.Logger {
24
29
timeFormat := config ["time" ]
25
30
26
31
if writer != nil {
27
- switch format := config ["format" ]; format {
28
- case "color" , "text" :
32
+ if format := config ["format" ]; format != "json" {
33
+ console := & zerolog.ConsoleWriter {Out : writer }
34
+
35
+ switch format {
36
+ case "text" :
37
+ console .NoColor = true
38
+ case "color" :
39
+ console .NoColor = false // useless, but anyway
40
+ default :
41
+ // autodetection if output support color
42
+ // go-isatty - dependency for go-colorable - dependency for ConsoleWriter
43
+ console .NoColor = ! isatty .IsTerminal (writer .(* os.File ).Fd ())
44
+ }
45
+
29
46
if timeFormat != "" {
30
- writer = & zerolog.ConsoleWriter {
31
- Out : writer ,
32
- NoColor : format == "text" ,
33
- TimeFormat : "15:04:05.000" ,
34
- }
47
+ console .TimeFormat = "15:04:05.000"
35
48
} else {
36
- writer = & zerolog.ConsoleWriter {
37
- Out : writer ,
38
- NoColor : format == "text" ,
39
- PartsOrder : []string {
40
- zerolog .LevelFieldName ,
41
- zerolog .CallerFieldName ,
42
- zerolog .MessageFieldName ,
43
- },
49
+ console .PartsOrder = []string {
50
+ zerolog .LevelFieldName ,
51
+ zerolog .CallerFieldName ,
52
+ zerolog .MessageFieldName ,
44
53
}
45
54
}
46
- case "json" : // none
55
+
56
+ writer = console
47
57
}
48
58
49
59
writer = zerolog .MultiLevelWriter (writer , MemoryLog )
0 commit comments