-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog.go
138 lines (120 loc) · 2.42 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package log
import (
"errors"
"fmt"
"log"
"os"
)
func New(level Level) Interface {
var debug *log.Logger
if level <= Debug {
debug = log.New(os.Stderr, "DEBUG: ", log.Ldate|log.Ltime|log.Lshortfile)
} else {
debug = nil
}
var info *log.Logger
if level <= Info {
info = log.New(os.Stderr, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
} else {
info = nil
}
var warning *log.Logger
if level <= Warning {
warning = log.New(os.Stderr, "WARNING: ", log.Ldate|log.Ltime|log.Lshortfile)
} else {
warning = nil
}
var error *log.Logger
if level <= Error {
error = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
} else {
error = nil
}
return &logger{debug: debug, info: info, warning: warning, error: error, level: level}
}
type Level int8
const (
Debug Level = iota
Info
Warning
Error
Silent
)
type logger struct {
debug *log.Logger
info *log.Logger
warning *log.Logger
error *log.Logger
level Level
}
func (logger *logger) Debug(format string, v ...any) {
if logger.debug != nil {
logger.debug.Output(3, fmt.Sprintf(format, v...))
}
}
func (logger *logger) Info(format string, v ...any) {
if logger.info != nil {
logger.info.Output(3, fmt.Sprintf(format, v...))
}
}
func (logger *logger) Warning(format string, v ...any) {
if logger.warning != nil {
logger.warning.Output(3, fmt.Sprintf(format, v...))
}
}
func (logger *logger) Error(format string, v ...any) {
if logger.error != nil {
logger.error.Output(3, fmt.Sprintf(format, v...))
}
}
func (logger *logger) GetLevel() Level {
return logger.level
}
type Interface interface {
GetLevel() Level
Debug(string, ...any)
Info(string, ...any)
Warning(string, ...any)
Error(string, ...any)
}
// These functions are used for the cobra CLI tool to parse user specified log level
func (e *Level) String() string {
switch *e {
case Debug:
return "debug"
case Info:
return "info"
case Warning:
return "warning"
case Error:
return "error"
case Silent:
return "silent"
default:
return "unknown"
}
}
func (e *Level) Set(v string) error {
switch v {
case "debug":
*e = Debug
return nil
case "info":
*e = Info
return nil
case "warning":
*e = Warning
return nil
case "error":
*e = Error
return nil
case "silent":
*e = Silent
return nil
default:
return errors.New(`must be one of "debug", "info", "warning", "error" or "silent"`)
}
}
func (e *Level) Type() string {
return "log.Level"
}