-
Notifications
You must be signed in to change notification settings - Fork 0
/
log.go
110 lines (91 loc) · 2.24 KB
/
log.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package log
import (
"fmt"
"os"
"strings"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
const (
PanicLevel = "PANIC"
FatalLevel = "FATAL"
ErrorLevel = "ERROR"
WarnLevel = "WARN"
InfoLevel = "INFO"
DebugLevel = "DEBUG"
TraceLevel = "TRACE"
Disabled = "DISABLED"
)
var Levels = []string{PanicLevel, FatalLevel, ErrorLevel, WarnLevel, InfoLevel, Disabled, TraceLevel, Disabled}
const (
WriterConsole = "console"
WriterJSON = "json"
)
var Writers = []string{WriterConsole, WriterJSON}
const (
OutputStdOut = "stdout"
OutputStdErr = "stderr"
)
var Outputs = []string{OutputStdOut, OutputStdErr}
// New initializes the logger based on the passed Config,
// defaults to DefaultConfig if `config` is nil.
func New(config *Config) error {
if config == nil {
config = DefaultConfig
}
if config.LogLevel == "" {
config.LogLevel = DefaultConfig.LogLevel
}
if config.LogOutput == "" {
config.LogOutput = DefaultConfig.LogOutput
}
if config.LogWriter == "" {
config.LogWriter = DefaultConfig.LogWriter
}
logOutput := strings.ToLower(config.LogOutput)
logWriter := strings.ToLower(config.LogWriter)
logLevel := strings.ToUpper(config.LogLevel)
var f *os.File
switch logOutput {
case OutputStdOut:
f = os.Stdout
case OutputStdErr:
f = os.Stderr
default:
return fmt.Errorf("unknown log-output '%s'", logOutput)
}
logger := zerolog.New(f)
switch logWriter {
case WriterConsole:
logger = log.Output(zerolog.ConsoleWriter{
Out: f, TimeFormat: time.RFC3339Nano,
})
case WriterJSON:
break
default:
return fmt.Errorf("unknown log-writer '%s'", logWriter)
}
log.Logger = logger.With().Timestamp().Caller().Logger()
switch logLevel {
case PanicLevel:
zerolog.SetGlobalLevel(zerolog.PanicLevel)
case FatalLevel:
zerolog.SetGlobalLevel(zerolog.FatalLevel)
case ErrorLevel:
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
case WarnLevel:
zerolog.SetGlobalLevel(zerolog.WarnLevel)
case InfoLevel:
zerolog.SetGlobalLevel(zerolog.InfoLevel)
case DebugLevel:
zerolog.SetGlobalLevel(zerolog.DebugLevel)
case TraceLevel:
zerolog.SetGlobalLevel(zerolog.TraceLevel)
case Disabled:
zerolog.SetGlobalLevel(zerolog.Disabled)
default:
return fmt.Errorf("unknown log-level '%s'", logLevel)
}
return nil
}