Merge pull request #127 from noxiouz/fix_datarace_GetLevel
[Race] Fix datarace in GetLevel
diff --git a/exported.go b/exported.go
index fd092fc..a67e1b8 100644
--- a/exported.go
+++ b/exported.go
@@ -36,6 +36,8 @@
// GetLevel returns the standard logger level.
func GetLevel() Level {
+ std.mu.Lock()
+ defer std.mu.Unlock()
return std.Level
}
diff --git a/logrus_test.go b/logrus_test.go
index 7f52c6f..d85dba4 100644
--- a/logrus_test.go
+++ b/logrus_test.go
@@ -5,6 +5,7 @@
"encoding/json"
"strconv"
"strings"
+ "sync"
"testing"
"github.com/stretchr/testify/assert"
@@ -281,3 +282,20 @@
l, err = ParseLevel("invalid")
assert.Equal(t, "not a valid logrus Level: \"invalid\"", err.Error())
}
+
+func TestGetSetLevelRace(t *testing.T) {
+ wg := sync.WaitGroup{}
+ for i := 0; i < 100; i++ {
+ wg.Add(1)
+ go func(i int) {
+ defer wg.Done()
+ if i%2 == 0 {
+ SetLevel(InfoLevel)
+ } else {
+ GetLevel()
+ }
+ }(i)
+
+ }
+ wg.Wait()
+}