From 77b095a8c32c423dea495f94babe49d7f169f060 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Fri, 20 Sep 2024 13:30:33 +0000 Subject: [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 --- internal/log/caller.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'internal/log/caller.go') diff --git a/internal/log/caller.go b/internal/log/caller.go index 75b8d82d9..5385b63b5 100644 --- a/internal/log/caller.go +++ b/internal/log/caller.go @@ -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):] } -- cgit v1.2.3