mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
b24c8e07f1
Signed-off-by: Ghislain Bourgeois <ghislain.bourgeois@gmail.com>
41 lines
1 KiB
Go
41 lines
1 KiB
Go
package gelf
|
|
|
|
import (
|
|
"runtime"
|
|
"strings"
|
|
)
|
|
|
|
// getCaller returns the filename and the line info of a function
|
|
// further down in the call stack. Passing 0 in as callDepth would
|
|
// return info on the function calling getCallerIgnoringLog, 1 the
|
|
// parent function, and so on. Any suffixes passed to getCaller are
|
|
// path fragments like "/pkg/log/log.go", and functions in the call
|
|
// stack from that file are ignored.
|
|
func getCaller(callDepth int, suffixesToIgnore ...string) (file string, line int) {
|
|
// bump by 1 to ignore the getCaller (this) stackframe
|
|
callDepth++
|
|
outer:
|
|
for {
|
|
var ok bool
|
|
_, file, line, ok = runtime.Caller(callDepth)
|
|
if !ok {
|
|
file = "???"
|
|
line = 0
|
|
break
|
|
}
|
|
|
|
for _, s := range suffixesToIgnore {
|
|
if strings.HasSuffix(file, s) {
|
|
callDepth++
|
|
continue outer
|
|
}
|
|
}
|
|
break
|
|
}
|
|
return
|
|
}
|
|
|
|
func getCallerIgnoringLogMulti(callDepth int) (string, int) {
|
|
// the +1 is to ignore this (getCallerIgnoringLogMulti) frame
|
|
return getCaller(callDepth+1, "/pkg/log/log.go", "/pkg/io/multi.go")
|
|
}
|