-
Notifications
You must be signed in to change notification settings - Fork 33
/
logger.go
92 lines (75 loc) · 1.78 KB
/
logger.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
package utils
import (
"log"
"os"
)
type LevelType int
const (
ERROR LevelType = iota
WARN
INFO
DEBUG
)
type Log interface {
Debug(a ...interface{})
Info(a ...interface{})
Warn(a ...interface{})
Error(a ...interface{})
Output(a ...interface{})
}
// NullLog is a logger that does nothing
type NullLog struct {
}
func (nl *NullLog) Debug(...interface{}) {
}
func (nl *NullLog) Info(...interface{}) {
}
func (nl *NullLog) Warn(...interface{}) {
}
func (nl *NullLog) Error(...interface{}) {
}
func (nl *NullLog) Output(...interface{}) {
}
type defaultLogger struct {
logLevel LevelType
outputLog *log.Logger
debugLog *log.Logger
infoLog *log.Logger
warnLog *log.Logger
errorLog *log.Logger
}
// NewDefaultLogger creates a new logger with a given LogLevel.
// All logs are written to Stderr and output is written to Stdout.
func NewDefaultLogger(logLevel LevelType) *defaultLogger {
logger := new(defaultLogger)
logger.logLevel = logLevel
logger.outputLog = log.New(os.Stdout, "", 0)
logger.debugLog = log.New(os.Stderr, "[Debug] ", 0)
logger.infoLog = log.New(os.Stderr, "[Info] ", 0)
logger.warnLog = log.New(os.Stderr, "[Warn] ", 0)
logger.errorLog = log.New(os.Stderr, "[Error] ", 0)
return logger
}
func (logger defaultLogger) Debug(a ...interface{}) {
if logger.logLevel >= DEBUG {
logger.debugLog.Println(a...)
}
}
func (logger defaultLogger) Info(a ...interface{}) {
if logger.logLevel >= INFO {
logger.infoLog.Println(a...)
}
}
func (logger defaultLogger) Warn(a ...interface{}) {
if logger.logLevel >= WARN {
logger.warnLog.Println(a...)
}
}
func (logger defaultLogger) Error(a ...interface{}) {
if logger.logLevel >= ERROR {
logger.errorLog.Println(a...)
}
}
func (logger defaultLogger) Output(a ...interface{}) {
logger.outputLog.Println(a...)
}