-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlogger.go
146 lines (123 loc) · 3.49 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
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
139
140
141
142
143
144
145
146
package clog
// Logger frontend
type Logger struct {
handler Handler
}
// NewLogger creates a new logger
func NewLogger(handler Handler) *Logger {
return &Logger{
handler: handler,
}
}
// NewConsoleLogger is a shortcut to create a Logger with a ConsoleHandler
func NewConsoleLogger() *Logger {
return NewLogger(NewConsoleHandler("", 0))
}
// NewFilteredConsoleLogger is a shortcut to create a Logger with a FilteredHandler sending to a ConsoleHandler
func NewFilteredConsoleLogger(minLevel LogLevel) *Logger {
return NewLogger(NewLevelFilter(minLevel, NewConsoleHandler("", 0)))
}
// SetHandler sets a new handler for the logger
func (l *Logger) SetHandler(handler Handler) {
transferLogFromOverflowHandler(handler, l.handler)
l.handler = handler
}
// GetHandler returns the current handler used by the logger
func (l *Logger) GetHandler() Handler {
return l.handler
}
// SetPrefix sets the output prefix for the standard logger
func (l *Logger) SetPrefix(prefix string) Handler {
if l.handler == nil {
return l
}
prefixer, ok := l.handler.(Prefixer)
if ok {
prefixer.SetPrefix(prefix)
}
return l
}
// Log sends a log entry with the specified level
func (l *Logger) Log(level LogLevel, v ...interface{}) {
l.log(level, v...)
}
// Logf sends a log entry with the specified level
func (l *Logger) Logf(level LogLevel, format string, v ...interface{}) {
l.logf(level, format, v...)
}
// Trace sends trace information for heavy debugging
func (l *Logger) Trace(v ...interface{}) {
l.log(LevelTrace, v...)
}
// Tracef sends trace information for heavy debugging
func (l *Logger) Tracef(format string, v ...interface{}) {
l.logf(LevelTrace, format, v...)
}
// Debug sends debugging information
func (l *Logger) Debug(v ...interface{}) {
l.log(LevelDebug, v...)
}
// Debugf sends debugging information
func (l *Logger) Debugf(format string, v ...interface{}) {
l.logf(LevelDebug, format, v...)
}
// Info logs some noticeable information
func (l *Logger) Info(v ...interface{}) {
l.log(LevelInfo, v...)
}
// Infof logs some noticeable information
func (l *Logger) Infof(format string, v ...interface{}) {
l.logf(LevelInfo, format, v...)
}
// Warning send some important message to the console
func (l *Logger) Warning(v ...interface{}) {
l.log(LevelWarning, v...)
}
// Warningf send some important message to the console
func (l *Logger) Warningf(format string, v ...interface{}) {
l.logf(LevelWarning, format, v...)
}
// Error sends error information to the console
func (l *Logger) Error(v ...interface{}) {
l.log(LevelError, v...)
}
// Errorf sends error information to the console
func (l *Logger) Errorf(format string, v ...interface{}) {
l.logf(LevelError, format, v...)
}
// log is used to keep a constant calldepth
func (l *Logger) log(level LogLevel, v ...interface{}) {
if l.handler == nil {
return
}
_ = l.handler.LogEntry(LogEntry{
Calldepth: 2,
Level: level,
Values: v,
})
}
// logf is used to keep a constant calldepth
func (l *Logger) logf(level LogLevel, format string, v ...interface{}) {
if l.handler == nil {
return
}
_ = l.handler.LogEntry(LogEntry{
Calldepth: 2,
Level: level,
Format: format,
Values: v,
})
}
// LogEntry sends a LogEntry directly. Logger can also be used as a Handler
func (l *Logger) LogEntry(logEntry LogEntry) error {
if l.handler == nil {
return ErrNoRegisteredHandler
}
logEntry.Calldepth++
return l.handler.LogEntry(logEntry)
}
// Logger is also a Handler
var (
_ Handler = &Logger{}
_ MiddlewareHandler = &Logger{}
)