Skip to content

Commit 2347d76

Browse files
Make operations with global logger thread-safe (#145)
1 parent f78912a commit 2347d76

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

logger/logger.go

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package logger
22

3-
import "log"
3+
import (
4+
"log"
5+
"sync"
6+
)
47

58
var (
9+
_mu sync.RWMutex
610
_level = LevelInfo
711
_logger Logger = simpleLogger{}
812
)
@@ -36,55 +40,73 @@ type Level int8
3640
// SetLevel set global RSocket log level.
3741
// Available levels are `LevelDebug`, `LevelInfo`, `LevelWarn` and `LevelError`.
3842
func SetLevel(level Level) {
43+
_mu.Lock()
44+
defer _mu.Unlock()
3945
_level = level
4046
}
4147

4248
// SetLogger customize the global logger.
4349
// A standard log implementation will be used by default.
4450
func SetLogger(logger Logger) {
51+
_mu.Lock()
52+
defer _mu.Unlock()
4553
_logger = logger
4654
}
4755

4856
// GetLevel returns current logger level.
4957
func GetLevel() Level {
58+
_mu.RLock()
59+
defer _mu.RUnlock()
5060
return _level
5161
}
5262

5363
// IsDebugEnabled returns true if debug level is open.
5464
func IsDebugEnabled() bool {
65+
_mu.RLock()
66+
defer _mu.RUnlock()
5567
return _level <= LevelDebug
5668
}
5769

5870
// Debugf prints debug level log.
5971
func Debugf(format string, args ...interface{}) {
60-
if _logger == nil || _level > LevelDebug {
72+
logger, level := getLoggerAndLevel()
73+
if logger == nil || level > LevelDebug {
6174
return
6275
}
63-
_logger.Debugf(format, args...)
76+
logger.Debugf(format, args...)
6477
}
6578

6679
// Infof prints info level log.
6780
func Infof(format string, args ...interface{}) {
68-
if _logger == nil || _level > LevelInfo {
81+
logger, level := getLoggerAndLevel()
82+
if logger == nil || level > LevelInfo {
6983
return
7084
}
71-
_logger.Infof(format, args...)
85+
logger.Infof(format, args...)
7286
}
7387

7488
// Warnf prints warn level log.
7589
func Warnf(format string, args ...interface{}) {
76-
if _logger == nil || _level > LevelWarn {
90+
logger, level := getLoggerAndLevel()
91+
if logger == nil || level > LevelWarn {
7792
return
7893
}
79-
_logger.Warnf(format, args...)
94+
logger.Warnf(format, args...)
8095
}
8196

8297
// Errorf prints error level log.
8398
func Errorf(format string, args ...interface{}) {
84-
if _logger == nil || _level > LevelError {
99+
logger, level := getLoggerAndLevel()
100+
if logger == nil || level > LevelError {
85101
return
86102
}
87-
_logger.Errorf(format, args...)
103+
logger.Errorf(format, args...)
104+
}
105+
106+
func getLoggerAndLevel() (Logger, Level) {
107+
_mu.RLock()
108+
defer _mu.RUnlock()
109+
return _logger, _level
88110
}
89111

90112
type simpleLogger struct {

0 commit comments

Comments
 (0)