mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
42 lines
1 KiB
Go
42 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")
|
||
|
}
|