-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathlogger.go
More file actions
102 lines (85 loc) · 1.75 KB
/
logger.go
File metadata and controls
102 lines (85 loc) · 1.75 KB
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
package gone
import (
"log"
)
type LoggerLevel int8
const (
DebugLevel LoggerLevel = -1
InfoLevel LoggerLevel = 0
WarnLevel LoggerLevel = 1
ErrorLevel LoggerLevel = 2
)
// Logger Interface which can be injected and provided by gone framework core
type Logger interface {
Infof(msg string, args ...any)
Errorf(msg string, args ...any)
Warnf(msg string, args ...any)
Debugf(msg string, args ...any)
GetLevel() LoggerLevel
SetLevel(level LoggerLevel)
}
const LoggerName = "gone-logger"
func GetDefaultLogger() Logger {
return &defaultLogger{
level: new(string),
}
}
type defaultLogger struct {
Flag
level *string `gone:"config,log.level=info"`
}
func (l *defaultLogger) GonerName() string {
return LoggerName
}
func (l *defaultLogger) Level() LoggerLevel {
if l.level == nil {
return InfoLevel
}
switch *l.level {
case "debug":
return DebugLevel
case "warn":
return WarnLevel
case "error":
return ErrorLevel
default:
return InfoLevel
}
}
func (l *defaultLogger) Infof(msg string, args ...any) {
if l.Level() <= InfoLevel {
log.Printf(msg, args...)
}
}
func (l *defaultLogger) Errorf(msg string, args ...any) {
if l.Level() <= ErrorLevel {
log.Printf(msg, args...)
}
}
func (l *defaultLogger) Warnf(msg string, args ...any) {
if l.Level() <= WarnLevel {
log.Printf(msg, args...)
}
}
func (l *defaultLogger) Debugf(msg string, args ...any) {
if l.Level() <= DebugLevel {
log.Printf(msg, args...)
}
}
func (l *defaultLogger) GetLevel() LoggerLevel {
return l.Level()
}
func (l *defaultLogger) SetLevel(level LoggerLevel) {
switch level {
case DebugLevel:
*l.level = "debug"
case InfoLevel:
*l.level = "info"
case WarnLevel:
*l.level = "warn"
case ErrorLevel:
*l.level = "error"
default:
*l.level = "info"
}
}