-
Notifications
You must be signed in to change notification settings - Fork 3.3k
/
Copy pathlogger.go
63 lines (51 loc) · 1.11 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
package loggingframework
import (
"sync"
)
type Logger struct {
config *LoggerConfig
mu sync.RWMutex
}
var (
instance *Logger
once sync.Once
)
func GetLogger() *Logger {
once.Do(func() {
instance = &Logger{
config: NewLoggerConfig(LogLevelInfo, NewConsoleAppender()),
}
})
return instance
}
func (l *Logger) SetConfig(config *LoggerConfig) {
l.mu.Lock()
defer l.mu.Unlock()
l.config = config
}
func (l *Logger) log(level LogLevel, message string) error {
l.mu.RLock()
if level < l.config.Level {
l.mu.RUnlock()
return nil
}
appender := l.config.Appender
l.mu.RUnlock()
logMessage := NewLogMessage(level, message)
return appender.Append(logMessage)
}
func (l *Logger) Debug(message string) error {
return l.log(LogLevelDebug, message)
}
func (l *Logger) Info(message string) error {
return l.log(LogLevelInfo, message)
}
func (l *Logger) Warning(message string) error {
return l.log(LogLevelWarning, message)
}
func (l *Logger) Error(message string) error {
return l.log(LogLevelError, message)
}
func (l *Logger) Fatal(message string) error {
return l.log(LogLevelFatal, message)
}