summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/mattermost/logr/v2/pkg.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mattermost/logr/v2/pkg.go')
-rw-r--r--vendor/github.com/mattermost/logr/v2/pkg.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/vendor/github.com/mattermost/logr/v2/pkg.go b/vendor/github.com/mattermost/logr/v2/pkg.go
new file mode 100644
index 00000000..873b2e95
--- /dev/null
+++ b/vendor/github.com/mattermost/logr/v2/pkg.go
@@ -0,0 +1,57 @@
+package logr
+
+import (
+ "runtime"
+ "strings"
+ "sync"
+)
+
+const (
+ maximumStackDepth int = 30
+)
+
+var (
+ logrPkg string
+ pkgCalcOnce sync.Once
+)
+
+// GetPackageName returns the root package name of Logr.
+func GetLogrPackageName() string {
+ pkgCalcOnce.Do(func() {
+ logrPkg = GetPackageName("GetLogrPackageName")
+ })
+ return logrPkg
+}
+
+// GetPackageName returns the package name of the caller.
+// `callingFuncName` should be the name of the calling function and
+// should be unique enough not to collide with any runtime methods.
+func GetPackageName(callingFuncName string) string {
+ var pkgName string
+
+ pcs := make([]uintptr, maximumStackDepth)
+ _ = runtime.Callers(0, pcs)
+
+ for _, pc := range pcs {
+ funcName := runtime.FuncForPC(pc).Name()
+ if strings.Contains(funcName, callingFuncName) {
+ pkgName = ResolvePackageName(funcName)
+ break
+ }
+ }
+ return pkgName
+}
+
+// ResolvePackageName reduces a fully qualified function name to the package name
+func ResolvePackageName(f string) string {
+ for {
+ lastPeriod := strings.LastIndex(f, ".")
+ lastSlash := strings.LastIndex(f, "/")
+ if lastPeriod > lastSlash {
+ f = f[:lastPeriod]
+ } else {
+ break
+ }
+ }
+ return f
+}