fix sync.Once usage instead of adding a mutex lock

This commit is contained in:
David Bariod 2019-03-06 14:08:02 +01:00
parent b9d451406d
commit cf1b9fd15e
1 changed files with 12 additions and 11 deletions

View File

@ -156,20 +156,23 @@ func getPackageName(f string) string {
// getCaller retrieves the name of the first non-logrus calling function // getCaller retrieves the name of the first non-logrus calling function
func getCaller() *runtime.Frame { func getCaller() *runtime.Frame {
// cache this package's fully-qualified name
callerInitOnce.Do(func() {
pcs := make([]uintptr, 2)
_ = runtime.Callers(0, pcs)
logrusPackage = getPackageName(runtime.FuncForPC(pcs[1]).Name())
// now that we have the cache, we can skip a minimum count of known-logrus functions
// XXX this is dubious, the number of frames may vary
minimumCallerDepth = knownLogrusFrames
})
// Restrict the lookback frames to avoid runaway lookups // Restrict the lookback frames to avoid runaway lookups
pcs := make([]uintptr, maximumCallerDepth) pcs := make([]uintptr, maximumCallerDepth)
depth := runtime.Callers(minimumCallerDepth, pcs) depth := runtime.Callers(minimumCallerDepth, pcs)
frames := runtime.CallersFrames(pcs[:depth]) frames := runtime.CallersFrames(pcs[:depth])
// cache this package's fully-qualified name
callerInitOnce.Do(func() {
logrusPackage = getPackageName(runtime.FuncForPC(pcs[0]).Name())
// now that we have the cache, we can skip a minimum count of known-logrus functions
// XXX this is dubious, the number of frames may vary store an entry in a logger interface
minimumCallerDepth = knownLogrusFrames
})
for f, again := frames.Next(); again; f, again = frames.Next() { for f, again := frames.Next(); again; f, again = frames.Next() {
pkg := getPackageName(f.Function) pkg := getPackageName(f.Function)
@ -206,9 +209,7 @@ func (entry Entry) log(level Level, msg string) {
entry.Level = level entry.Level = level
entry.Message = msg entry.Message = msg
if entry.Logger.ReportCaller { if entry.Logger.ReportCaller {
entry.Logger.mu.Lock()
entry.Caller = getCaller() entry.Caller = getCaller()
entry.Logger.mu.Unlock()
} }
entry.fireHooks() entry.fireHooks()