From b9d451406decb5cab037cc3a473547e0eb940370 Mon Sep 17 00:00:00 2001 From: georlav Date: Mon, 4 Mar 2019 20:38:10 +0200 Subject: [PATCH] fix ReportCaller race condition --- entry.go | 2 ++ logrus_test.go | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/entry.go b/entry.go index fd37728..4ca6081 100644 --- a/entry.go +++ b/entry.go @@ -206,7 +206,9 @@ func (entry Entry) log(level Level, msg string) { entry.Level = level entry.Message = msg if entry.Logger.ReportCaller { + entry.Logger.mu.Lock() entry.Caller = getCaller() + entry.Logger.mu.Unlock() } entry.fireHooks() diff --git a/logrus_test.go b/logrus_test.go index dfa053b..72b6ea2 100644 --- a/logrus_test.go +++ b/logrus_test.go @@ -743,3 +743,20 @@ func TestReportCallerOnTextFormatter(t *testing.T) { l.Formatter.(*TextFormatter).DisableColors = true l.WithFields(Fields{"func": "func", "file": "file"}).Info("test") } + +func TestSetReportCallerRace(t *testing.T) { + l := New() + l.Out = ioutil.Discard + l.SetReportCaller(true) + + var wg sync.WaitGroup + wg.Add(100) + + for i := 0; i < 100; i++ { + go func() { + l.Error("Some Error") + wg.Done() + }() + } + wg.Wait() +}