func ResolvePackageName(f string) string {
	for {
		lastPeriod := strings.LastIndex(f, ".")
		lastSlash := strings.LastIndex(f, "/")
		if lastPeriod > lastSlash {
			f = f[:lastPeriod]
		} else {
			break
		}
	}
	return f
}
ResolvePackageName reduces a fully qualified function name to the package name
package logr
import (
	"runtime"
	"strings"
	"sync"
)
const (
	maximumStackDepth int = 30
)
var (
	logrPkg     string
	pkgCalcOnce sync.Once
)
func GetLogrPackageName() string {
	pkgCalcOnce.Do(func() {
		logrPkg = GetPackageName("GetLogrPackageName")
	})
	return logrPkg
}
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
}