1
1
package log
2
2
3
3
import (
4
+ "sync"
5
+
4
6
"github.com/no-src/log/level"
5
7
)
6
8
7
9
var (
8
10
defaultLogger Logger
9
11
defaultSampleLogger Logger
12
+ mu sync.RWMutex
10
13
)
11
14
12
15
const defaultSampleRate = 1
@@ -20,6 +23,8 @@ func InitDefaultLogger(logger Logger) {
20
23
// InitDefaultLoggerWithSample init a default logger and sample logger
21
24
// if not specified, default is consoleLogger with InfoLevel, and default sample rate is 1
22
25
func InitDefaultLoggerWithSample (logger Logger , sampleRate float64 ) {
26
+ mu .Lock ()
27
+ defer mu .Unlock ()
23
28
defaultLogger = logger
24
29
if defaultLogger == nil {
25
30
defaultLogger = NewEmptyLogger ()
@@ -29,22 +34,22 @@ func InitDefaultLoggerWithSample(logger Logger, sampleRate float64) {
29
34
30
35
// Debug write the debug log
31
36
func Debug (format string , args ... interface {}) {
32
- defaultLogger .Debug (format , args ... )
37
+ DefaultLogger () .Debug (format , args ... )
33
38
}
34
39
35
40
// Info write the info log
36
41
func Info (format string , args ... interface {}) {
37
- defaultLogger .Info (format , args ... )
42
+ DefaultLogger () .Info (format , args ... )
38
43
}
39
44
40
45
// Warn write the warn log
41
46
func Warn (format string , args ... interface {}) {
42
- defaultLogger .Warn (format , args ... )
47
+ DefaultLogger () .Warn (format , args ... )
43
48
}
44
49
45
50
// Error write the error log
46
51
func Error (err error , format string , args ... interface {}) {
47
- defaultLogger .Error (err , format , args ... )
52
+ DefaultLogger () .Error (err , format , args ... )
48
53
}
49
54
50
55
// ErrorIf write the error log if err is not nil
@@ -57,22 +62,22 @@ func ErrorIf(err error, format string, args ...interface{}) error {
57
62
58
63
// DebugSample write the debug log by random sampling
59
64
func DebugSample (format string , args ... interface {}) {
60
- defaultSampleLogger .Debug (format , args ... )
65
+ DefaultSampleLogger () .Debug (format , args ... )
61
66
}
62
67
63
68
// InfoSample write the info log by random sampling
64
69
func InfoSample (format string , args ... interface {}) {
65
- defaultSampleLogger .Info (format , args ... )
70
+ DefaultSampleLogger () .Info (format , args ... )
66
71
}
67
72
68
73
// WarnSample write the warn log by random sampling
69
74
func WarnSample (format string , args ... interface {}) {
70
- defaultSampleLogger .Warn (format , args ... )
75
+ DefaultSampleLogger () .Warn (format , args ... )
71
76
}
72
77
73
78
// ErrorSample write the error log by random sampling
74
79
func ErrorSample (err error , format string , args ... interface {}) {
75
- defaultSampleLogger .Error (err , format , args ... )
80
+ DefaultSampleLogger () .Error (err , format , args ... )
76
81
}
77
82
78
83
// ErrorIfSample write the error log by random sampling if err is not nil
@@ -85,19 +90,28 @@ func ErrorIfSample(err error, format string, args ...interface{}) error {
85
90
86
91
// Log write the log without level
87
92
func Log (format string , args ... interface {}) {
88
- defaultLogger .Log (format , args ... )
93
+ DefaultLogger () .Log (format , args ... )
89
94
}
90
95
91
96
// Close close the current logger
92
97
func Close () error {
93
- return defaultLogger .Close ()
98
+ return DefaultLogger () .Close ()
94
99
}
95
100
96
101
// DefaultLogger return the global default logger
97
102
func DefaultLogger () Logger {
103
+ mu .RLock ()
104
+ defer mu .RUnlock ()
98
105
return defaultLogger
99
106
}
100
107
108
+ // DefaultSampleLogger return the global default sample logger
109
+ func DefaultSampleLogger () Logger {
110
+ mu .RLock ()
111
+ defer mu .RUnlock ()
112
+ return defaultSampleLogger
113
+ }
114
+
101
115
func init () {
102
116
InitDefaultLogger (NewConsoleLogger (level .InfoLevel ))
103
117
}
0 commit comments