@@ -8,13 +8,35 @@ import (
88 "os"
99 "runtime"
1010 "strings"
11+ "sync"
1112)
1213
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+
1335var (
1436 // DEFAULT is the name of the default logger
1537 DEFAULT = "default"
1638 // NamedLoggers map of named loggers
17- NamedLoggers = make ( map [ string ] * Logger )
39+ NamedLoggers loggerMap
1840 prefix string
1941)
2042
@@ -25,33 +47,33 @@ func NewLogger(bufLen int64, name, provider, config string) *Logger {
2547 CriticalWithSkip (1 , "Unable to create default logger: %v" , err )
2648 panic (err )
2749 }
28- return NamedLoggers [DEFAULT ]
50+ l , _ := NamedLoggers .Load (DEFAULT )
51+ return l
2952}
3053
3154// NewNamedLogger creates a new named logger for a given configuration
3255func NewNamedLogger (name string , bufLen int64 , subname , provider , config string ) error {
33- logger , ok := NamedLoggers [ name ]
56+ logger , ok := NamedLoggers . Load ( name )
3457 if ! ok {
3558 logger = newLogger (name , bufLen )
36-
37- NamedLoggers [name ] = logger
59+ NamedLoggers .Store (name , logger )
3860 }
3961
4062 return logger .SetLogger (subname , provider , config )
4163}
4264
4365// DelNamedLogger closes and deletes the named logger
4466func DelNamedLogger (name string ) {
45- l , ok := NamedLoggers [ name ]
67+ l , ok := NamedLoggers . Load ( name )
4668 if ok {
47- delete ( NamedLoggers , name )
69+ NamedLoggers . Delete ( name )
4870 l .Close ()
4971 }
5072}
5173
5274// DelLogger removes the named sublogger from the default logger
5375func DelLogger (name string ) error {
54- logger := NamedLoggers [ DEFAULT ]
76+ logger , _ := NamedLoggers . Load ( DEFAULT )
5577 found , err := logger .DelLogger (name )
5678 if ! found {
5779 Trace ("Log %s not found, no need to delete" , name )
@@ -61,21 +83,24 @@ func DelLogger(name string) error {
6183
6284// GetLogger returns either a named logger or the default logger
6385func GetLogger (name string ) * Logger {
64- logger , ok := NamedLoggers [ name ]
86+ logger , ok := NamedLoggers . Load ( name )
6587 if ok {
6688 return logger
6789 }
68- return NamedLoggers [DEFAULT ]
90+ logger , _ = NamedLoggers .Load (DEFAULT )
91+ return logger
6992}
7093
7194// GetLevel returns the minimum logger level
7295func GetLevel () Level {
73- return NamedLoggers [DEFAULT ].GetLevel ()
96+ l , _ := NamedLoggers .Load (DEFAULT )
97+ return l .GetLevel ()
7498}
7599
76100// GetStacktraceLevel returns the minimum logger level
77101func GetStacktraceLevel () Level {
78- return NamedLoggers [DEFAULT ].GetStacktraceLevel ()
102+ l , _ := NamedLoggers .Load (DEFAULT )
103+ return l .GetStacktraceLevel ()
79104}
80105
81106// Trace records trace log
@@ -169,18 +194,18 @@ func IsFatal() bool {
169194
170195// Close closes all the loggers
171196func Close () {
172- l , ok := NamedLoggers [ DEFAULT ]
197+ l , ok := NamedLoggers . Load ( DEFAULT )
173198 if ! ok {
174199 return
175200 }
176- delete ( NamedLoggers , DEFAULT )
201+ NamedLoggers . Delete ( DEFAULT )
177202 l .Close ()
178203}
179204
180205// Log a message with defined skip and at logging level
181206// A skip of 0 refers to the caller of this command
182207func Log (skip int , level Level , format string , v ... interface {}) {
183- l , ok := NamedLoggers [ DEFAULT ]
208+ l , ok := NamedLoggers . Load ( DEFAULT )
184209 if ok {
185210 l .Log (skip + 1 , level , format , v ... )
186211 }
@@ -195,7 +220,8 @@ type LoggerAsWriter struct {
195220// NewLoggerAsWriter creates a Writer representation of the logger with setable log level
196221func NewLoggerAsWriter (level string , ourLoggers ... * Logger ) * LoggerAsWriter {
197222 if len (ourLoggers ) == 0 {
198- ourLoggers = []* Logger {NamedLoggers [DEFAULT ]}
223+ l , _ := NamedLoggers .Load (DEFAULT )
224+ ourLoggers = []* Logger {l }
199225 }
200226 l := & LoggerAsWriter {
201227 ourLoggers : ourLoggers ,
0 commit comments