[chore] ensure consistent caller name fetching regardless of compiler inlining (#3323)

* move logging levels into log package itself

* ensure inconsistent inlining doesn't mess with log calling function name

* remove unused global variable

* fix log level
This commit is contained in:
kim 2024-09-20 13:30:33 +00:00 committed by GitHub
commit 77b095a8c3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 292 additions and 204 deletions

View file

@ -23,11 +23,13 @@ import (
)
// Caller fetches the calling function name, skipping 'depth'.
//
//go:noinline
func Caller(depth int) string {
var pcs [1]uintptr
pcs := make([]uintptr, 1)
// Fetch calling function using calldepth
_ = runtime.Callers(depth, pcs[:])
// Fetch calling func using depth.
_ = runtime.Callers(depth, pcs)
fn := runtime.FuncForPC(pcs[0])
if fn == nil {
@ -37,14 +39,14 @@ func Caller(depth int) string {
// Get func name.
name := fn.Name()
// Drop all but the package name and function name, no mod path
// Drop all but package and function name, no path.
if idx := strings.LastIndex(name, "/"); idx >= 0 {
name = name[idx+1:]
}
const params = `[...]`
// Drop any generic type parameter markers
// Drop any function generic type parameter markers.
if idx := strings.Index(name, params); idx >= 0 {
name = name[:idx] + name[idx+len(params):]
}