diff --git a/logger.go b/logger.go index fccc391..9ffee73 100644 --- a/logger.go +++ b/logger.go @@ -4,9 +4,13 @@ import ( "fmt" "log" "os" + "sync" ) type Logger struct { + // added to avoid concurrent writes + sync.Mutex + name string level Level backends []Backend @@ -54,6 +58,9 @@ func (l *Logger) AsStdLog(level Level) *log.Logger { } func (l *Logger) Log(level Level, m string) { + l.Lock() + defer l.Unlock() + r := NewRecord(l.name, level, m) for _, backend := range l.backends { if r.Level >= backend.Level() { diff --git a/logging.go b/logging.go index daff311..3d0c603 100644 --- a/logging.go +++ b/logging.go @@ -4,9 +4,13 @@ import ( "errors" "fmt" "strings" + "sync" ) -var loggers map[string]*Logger +var ( + loggers map[string]*Logger + lock sync.Mutex +) type Level byte @@ -38,6 +42,9 @@ func LevelByName(l string) (Level, error) { type Formatter func(*Record) string func GetLogger(name string) (l *Logger) { + lock.Lock() + defer lock.Unlock() + if name == "" { name = "default" }