@@ -8,13 +8,35 @@ import (
8
8
"os"
9
9
"runtime"
10
10
"strings"
11
+ "sync"
11
12
)
12
13
14
+ type loggerMap struct {
15
+ sync.Map
16
+ }
17
+
18
+ func (m * loggerMap ) Load (k string ) (* Logger , bool ) {
19
+ v , ok := m .Map .Load (k )
20
+ if ! ok {
21
+ return nil , false
22
+ }
23
+ l , ok := v .(* Logger )
24
+ return l , ok
25
+ }
26
+
27
+ func (m * loggerMap ) Store (k string , v * Logger ) {
28
+ m .Map .Store (k , v )
29
+ }
30
+
31
+ func (m * loggerMap ) Delete (k string ) {
32
+ m .Map .Delete (k )
33
+ }
34
+
13
35
var (
14
36
// DEFAULT is the name of the default logger
15
37
DEFAULT = "default"
16
38
// NamedLoggers map of named loggers
17
- NamedLoggers = make ( map [ string ] * Logger )
39
+ NamedLoggers loggerMap
18
40
prefix string
19
41
)
20
42
@@ -25,33 +47,33 @@ func NewLogger(bufLen int64, name, provider, config string) *Logger {
25
47
CriticalWithSkip (1 , "Unable to create default logger: %v" , err )
26
48
panic (err )
27
49
}
28
- return NamedLoggers [DEFAULT ]
50
+ l , _ := NamedLoggers .Load (DEFAULT )
51
+ return l
29
52
}
30
53
31
54
// NewNamedLogger creates a new named logger for a given configuration
32
55
func NewNamedLogger (name string , bufLen int64 , subname , provider , config string ) error {
33
- logger , ok := NamedLoggers [ name ]
56
+ logger , ok := NamedLoggers . Load ( name )
34
57
if ! ok {
35
58
logger = newLogger (name , bufLen )
36
-
37
- NamedLoggers [name ] = logger
59
+ NamedLoggers .Store (name , logger )
38
60
}
39
61
40
62
return logger .SetLogger (subname , provider , config )
41
63
}
42
64
43
65
// DelNamedLogger closes and deletes the named logger
44
66
func DelNamedLogger (name string ) {
45
- l , ok := NamedLoggers [ name ]
67
+ l , ok := NamedLoggers . Load ( name )
46
68
if ok {
47
- delete ( NamedLoggers , name )
69
+ NamedLoggers . Delete ( name )
48
70
l .Close ()
49
71
}
50
72
}
51
73
52
74
// DelLogger removes the named sublogger from the default logger
53
75
func DelLogger (name string ) error {
54
- logger := NamedLoggers [ DEFAULT ]
76
+ logger , _ := NamedLoggers . Load ( DEFAULT )
55
77
found , err := logger .DelLogger (name )
56
78
if ! found {
57
79
Trace ("Log %s not found, no need to delete" , name )
@@ -61,21 +83,24 @@ func DelLogger(name string) error {
61
83
62
84
// GetLogger returns either a named logger or the default logger
63
85
func GetLogger (name string ) * Logger {
64
- logger , ok := NamedLoggers [ name ]
86
+ logger , ok := NamedLoggers . Load ( name )
65
87
if ok {
66
88
return logger
67
89
}
68
- return NamedLoggers [DEFAULT ]
90
+ logger , _ = NamedLoggers .Load (DEFAULT )
91
+ return logger
69
92
}
70
93
71
94
// GetLevel returns the minimum logger level
72
95
func GetLevel () Level {
73
- return NamedLoggers [DEFAULT ].GetLevel ()
96
+ l , _ := NamedLoggers .Load (DEFAULT )
97
+ return l .GetLevel ()
74
98
}
75
99
76
100
// GetStacktraceLevel returns the minimum logger level
77
101
func GetStacktraceLevel () Level {
78
- return NamedLoggers [DEFAULT ].GetStacktraceLevel ()
102
+ l , _ := NamedLoggers .Load (DEFAULT )
103
+ return l .GetStacktraceLevel ()
79
104
}
80
105
81
106
// Trace records trace log
@@ -169,18 +194,18 @@ func IsFatal() bool {
169
194
170
195
// Close closes all the loggers
171
196
func Close () {
172
- l , ok := NamedLoggers [ DEFAULT ]
197
+ l , ok := NamedLoggers . Load ( DEFAULT )
173
198
if ! ok {
174
199
return
175
200
}
176
- delete ( NamedLoggers , DEFAULT )
201
+ NamedLoggers . Delete ( DEFAULT )
177
202
l .Close ()
178
203
}
179
204
180
205
// Log a message with defined skip and at logging level
181
206
// A skip of 0 refers to the caller of this command
182
207
func Log (skip int , level Level , format string , v ... interface {}) {
183
- l , ok := NamedLoggers [ DEFAULT ]
208
+ l , ok := NamedLoggers . Load ( DEFAULT )
184
209
if ok {
185
210
l .Log (skip + 1 , level , format , v ... )
186
211
}
@@ -195,7 +220,8 @@ type LoggerAsWriter struct {
195
220
// NewLoggerAsWriter creates a Writer representation of the logger with setable log level
196
221
func NewLoggerAsWriter (level string , ourLoggers ... * Logger ) * LoggerAsWriter {
197
222
if len (ourLoggers ) == 0 {
198
- ourLoggers = []* Logger {NamedLoggers [DEFAULT ]}
223
+ l , _ := NamedLoggers .Load (DEFAULT )
224
+ ourLoggers = []* Logger {l }
199
225
}
200
226
l := & LoggerAsWriter {
201
227
ourLoggers : ourLoggers ,
0 commit comments