diff --git a/pkg/log/log.go b/pkg/log/log.go
index 026c6c0..43567e3 100644
--- a/pkg/log/log.go
+++ b/pkg/log/log.go
@@ -107,6 +107,9 @@
 
 	// V reports whether verbosity level l is at least the requested verbose level.
 	V(l int) bool
+
+	//Returns the log level of this specific logger
+	GetLogLevel() int
 }
 
 // Fields is used as key-value pairs for structured logging
@@ -119,8 +122,9 @@
 var cfgs map[string]zp.Config
 
 type logger struct {
-	log    *zp.SugaredLogger
-	parent *zp.Logger
+	log         *zp.SugaredLogger
+	parent      *zp.Logger
+	packageName string
 }
 
 func intToAtomicLevel(l int) zp.AtomicLevel {
@@ -266,8 +270,9 @@
 	}
 
 	loggers[pkgName] = &logger{
-		log:    l.Sugar(),
-		parent: l,
+		log:         l.Sugar(),
+		parent:      l,
+		packageName: pkgName,
 	}
 	return loggers[pkgName], nil
 }
@@ -287,8 +292,9 @@
 		}
 
 		loggers[pkgName] = &logger{
-			log:    l.Sugar(),
-			parent: l,
+			log:         l.Sugar(),
+			parent:      l,
+			packageName: pkgName,
 		}
 	}
 	return nil
@@ -334,8 +340,9 @@
 
 	// Set the logger
 	loggers[pkgName] = &logger{
-		log:    l.Sugar(),
-		parent: l,
+		log:         l.Sugar(),
+		parent:      l,
+		packageName: pkgName,
 	}
 	return loggers[pkgName], nil
 }
@@ -638,6 +645,11 @@
 	return l.parent.Core().Enabled(intToLevel(level))
 }
 
+// GetLogLevel returns the current level of the logger
+func (l logger) GetLogLevel() int {
+	return levelToInt(cfgs[l.packageName].Level.Level())
+}
+
 // With returns a logger initialized with the key-value pairs
 func With(keysAndValues Fields) Logger {
 	return logger{log: getPackageLevelSugaredLogger().With(serializeMap(keysAndValues)...), parent: defaultLogger.parent}
@@ -767,3 +779,8 @@
 func V(level int) bool {
 	return getPackageLevelLogger().V(level)
 }
+
+//GetLogLevel returns the log level of the invoking package
+func GetLogLevel() int {
+	return getPackageLevelLogger().GetLogLevel()
+}
diff --git a/pkg/log/log_test.go b/pkg/log/log_test.go
index 5ca0955..f32c55e 100644
--- a/pkg/log/log_test.go
+++ b/pkg/log/log_test.go
@@ -91,6 +91,19 @@
 			l, err := GetPackageLogLevel(name)
 			assert.Nil(t, err)
 			assert.Equal(t, l, expectedLevel)
+			// Get the package log level by invoking the specific logger created for this package
+			// This is a less expensive operation that the GetPackageLogLevel() request
+			level := myLoggers[name].GetLogLevel()
+			assert.Equal(t, level, expectedLevel)
+			// Check the verbosity level
+			for _, level := range levels {
+				toDisplay := myLoggers[name].V(level)
+				if level < expectedLevel {
+					assert.False(t, toDisplay)
+				} else {
+					assert.True(t, toDisplay)
+				}
+			}
 		}
 	}
 	//Test set all package level
@@ -100,6 +113,17 @@
 			l, err := GetPackageLogLevel(name)
 			assert.Nil(t, err)
 			assert.Equal(t, l, expectedLevel)
+			level := myLoggers[name].GetLogLevel()
+			assert.Equal(t, level, expectedLevel)
+			// Check the verbosity level
+			for _, level := range levels {
+				toDisplay := myLoggers[name].V(level)
+				if level < expectedLevel {
+					assert.False(t, toDisplay)
+				} else {
+					assert.True(t, toDisplay)
+				}
+			}
 		}
 	}
 }
