diff --git a/cmd/kyverno/main.go b/cmd/kyverno/main.go
index f55370e23f..c44308c7b4 100644
--- a/cmd/kyverno/main.go
+++ b/cmd/kyverno/main.go
@@ -57,7 +57,6 @@ func main() {
 	if err := flag.Set("v", "2"); err != nil {
 		setupLog.Error(err, "failed to set log level")
 		os.Exit(1)
-		// klog.Fatalf("failed to set log level: %v", err)
 	}
 
 	// Generate CSR with CN as FQDN due to https://github.com/nirmata/kyverno/issues/542
diff --git a/pkg/engine/validation.go b/pkg/engine/validation.go
index 49ede85d0f..00c32f6791 100644
--- a/pkg/engine/validation.go
+++ b/pkg/engine/validation.go
@@ -233,7 +233,7 @@ func validatePatterns(log logr.Logger, ctx context.EvalInterface, resource unstr
 				errorStr = append(errorStr, err.Error())
 			}
 			resp.Success = false
-			glog.V(4).Infof("Validation rule '%s' failed. %s", rule.Name, errorStr)
+			log.V(4).Info(fmt.Sprintf("Validation rule '%s' failed. %s", rule.Name, errorStr))
 			if rule.Validation.Message == "" {
 				resp.Message = fmt.Sprintf("Validation rule '%s' has failed", rule.Name)
 			} else {
diff --git a/pkg/kyverno/apply/command.go b/pkg/kyverno/apply/command.go
index 73fbdf1ac7..a48d2db3b4 100644
--- a/pkg/kyverno/apply/command.go
+++ b/pkg/kyverno/apply/command.go
@@ -11,8 +11,6 @@ import (
 
 	policy2 "github.com/nirmata/kyverno/pkg/policy"
 
-	"github.com/golang/glog"
-
 	"k8s.io/apimachinery/pkg/runtime/schema"
 
 	"k8s.io/client-go/discovery"
@@ -32,6 +30,7 @@ import (
 	yamlv2 "gopkg.in/yaml.v2"
 	"k8s.io/cli-runtime/pkg/genericclioptions"
 	"k8s.io/client-go/kubernetes/scheme"
+	log "sigs.k8s.io/controller-runtime/pkg/log"
 )
 
 func Command() *cobra.Command {
@@ -49,7 +48,7 @@ func Command() *cobra.Command {
 			defer func() {
 				if err != nil {
 					if !sanitizedError.IsErrorSanitized(err) {
-						glog.V(4).Info(err)
+						log.Log.Error(err, "failed to sanitize")
 						err = fmt.Errorf("Internal error")
 					}
 				}
diff --git a/pkg/kyverno/main.go b/pkg/kyverno/main.go
index d0d1163ef6..6424a57ddc 100644
--- a/pkg/kyverno/main.go
+++ b/pkg/kyverno/main.go
@@ -9,6 +9,9 @@ import (
 	"github.com/nirmata/kyverno/pkg/kyverno/apply"
 
 	"github.com/nirmata/kyverno/pkg/kyverno/version"
+	"k8s.io/klog"
+	"k8s.io/klog/klogr"
+	log "sigs.k8s.io/controller-runtime/pkg/log"
 
 	"github.com/spf13/cobra"
 )
@@ -19,7 +22,7 @@ func CLI() {
 		Short: "kyverno manages native policies of Kubernetes",
 	}
 
-	configureGlog(cli)
+	configurelog(cli)
 
 	commands := []*cobra.Command{
 		version.Command(),
@@ -36,9 +39,9 @@ func CLI() {
 	}
 }
 
-func configureGlog(cli *cobra.Command) {
-	flag.Parse()
-	_ = flag.Set("logtostderr", "true")
+func configurelog(cli *cobra.Command) {
+	klog.InitFlags(nil)
+	log.SetLogger(klogr.New())
 
 	cli.PersistentFlags().AddGoFlagSet(flag.CommandLine)
 	_ = cli.PersistentFlags().MarkHidden("alsologtostderr")
diff --git a/pkg/kyverno/validate/command.go b/pkg/kyverno/validate/command.go
index e606e134c0..4014189ff6 100644
--- a/pkg/kyverno/validate/command.go
+++ b/pkg/kyverno/validate/command.go
@@ -9,13 +9,12 @@ import (
 
 	"github.com/nirmata/kyverno/pkg/kyverno/sanitizedError"
 
-	"github.com/golang/glog"
-
 	policyvalidate "github.com/nirmata/kyverno/pkg/policy"
 
 	v1 "github.com/nirmata/kyverno/pkg/api/kyverno/v1"
 	"github.com/spf13/cobra"
 	"k8s.io/apimachinery/pkg/util/yaml"
+	log "sigs.k8s.io/controller-runtime/pkg/log"
 )
 
 func Command() *cobra.Command {
@@ -27,7 +26,7 @@ func Command() *cobra.Command {
 			defer func() {
 				if err != nil {
 					if !sanitizedError.IsErrorSanitized(err) {
-						glog.V(4).Info(err)
+						log.Log.Error(err, "failed to sanitize")
 						err = fmt.Errorf("Internal error")
 					}
 				}
diff --git a/pkg/openapi/crdSync.go b/pkg/openapi/crdSync.go
index da428c2955..5eed212617 100644
--- a/pkg/openapi/crdSync.go
+++ b/pkg/openapi/crdSync.go
@@ -6,13 +6,12 @@ import (
 
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 
-	"github.com/golang/glog"
-
 	"gopkg.in/yaml.v2"
 
 	"github.com/googleapis/gnostic/compiler"
 
 	openapi_v2 "github.com/googleapis/gnostic/OpenAPIv2"
+	log "sigs.k8s.io/controller-runtime/pkg/log"
 
 	client "github.com/nirmata/kyverno/pkg/dclient"
 	"k8s.io/apimachinery/pkg/util/wait"
@@ -44,12 +43,12 @@ func NewCRDSync(client *client.Client) *crdSync {
 func (c *crdSync) Run(workers int, stopCh <-chan struct{}) {
 	newDoc, err := c.client.DiscoveryClient.OpenAPISchema()
 	if err != nil {
-		glog.V(4).Infof("cannot get openapi schema: %v", err)
+		log.Log.Error(err, "cannot get openapi schema")
 	}
 
 	err = useOpenApiDocument(newDoc)
 	if err != nil {
-		glog.V(4).Infof("Could not set custom OpenApi document: %v\n", err)
+		log.Log.Error(err, "Could not set custom OpenApi document")
 	}
 
 	for i := 0; i < workers; i++ {
@@ -64,7 +63,7 @@ func (c *crdSync) sync() {
 
 	crds, err := c.client.ListResource("CustomResourceDefinition", "", nil)
 	if err != nil {
-		glog.V(4).Infof("could not fetch crd's from server: %v", err)
+		log.Log.Error(err, "could not fetch crd's from server")
 		return
 	}
 
@@ -91,7 +90,7 @@ func parseCRD(crd unstructured.Unstructured) {
 
 	crdName := crdDefinition.Spec.Names.Kind
 	if len(crdDefinition.Spec.Versions) < 1 {
-		glog.V(4).Infof("could not parse crd schema, no versions present")
+		log.Log.V(4).Info("could not parse crd schema, no versions present")
 		return
 	}
 
@@ -101,7 +100,7 @@ func parseCRD(crd unstructured.Unstructured) {
 
 	parsedSchema, err := openapi_v2.NewSchema(schema, compiler.NewContext("schema", nil))
 	if err != nil {
-		glog.V(4).Infof("could not parse crd schema:%v", err)
+		log.Log.Error(err, "could not parse crd schema:")
 		return
 	}
 
diff --git a/pkg/openapi/validation.go b/pkg/openapi/validation.go
index 71b8fa4b43..21ac488c2e 100644
--- a/pkg/openapi/validation.go
+++ b/pkg/openapi/validation.go
@@ -8,8 +8,6 @@ import (
 
 	"github.com/nirmata/kyverno/data"
 
-	"github.com/golang/glog"
-
 	"github.com/nirmata/kyverno/pkg/engine"
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 
@@ -19,6 +17,7 @@ import (
 	"github.com/googleapis/gnostic/compiler"
 	"k8s.io/kube-openapi/pkg/util/proto"
 	"k8s.io/kube-openapi/pkg/util/proto/validation"
+	log "sigs.k8s.io/controller-runtime/pkg/log"
 
 	"gopkg.in/yaml.v2"
 )
@@ -69,7 +68,7 @@ func ValidatePolicyMutation(policy v1.ClusterPolicy) error {
 		newPolicy.Spec.Rules = rules
 		resource, _ := generateEmptyResource(openApiGlobalState.definitions[openApiGlobalState.kindToDefinitionName[kind]]).(map[string]interface{})
 		if resource == nil {
-			glog.V(4).Infof("Cannot Validate policy: openApi definition now found for %v", kind)
+			log.Log.V(4).Info(fmt.Sprintf("Cannot Validate policy: openApi definition now found for %v", kind))
 			return nil
 		}
 		newResource := unstructured.Unstructured{Object: resource}
diff --git a/pkg/policy/existing.go b/pkg/policy/existing.go
index d01097e961..af8dfc09c6 100644
--- a/pkg/policy/existing.go
+++ b/pkg/policy/existing.go
@@ -6,7 +6,6 @@ import (
 	"time"
 
 	"github.com/go-logr/logr"
-	"github.com/golang/glog"
 	"github.com/minio/minio/pkg/wildcard"
 	kyverno "github.com/nirmata/kyverno/pkg/api/kyverno/v1"
 	"github.com/nirmata/kyverno/pkg/config"
@@ -40,7 +39,6 @@ func (pc *PolicyController) processExistingResources(policy kyverno.ClusterPolic
 		}
 
 		// apply the policy on each
-		glog.V(4).Infof("apply policy %s with resource version %s on resource %s/%s/%s with resource version %s", policy.Name, policy.ResourceVersion, resource.GetKind(), resource.GetNamespace(), resource.GetName(), resource.GetResourceVersion())
 		engineResponse := applyPolicy(policy, resource, logger)
 		// get engine response for mutation & validation independently
 		engineResponses = append(engineResponses, engineResponse...)
diff --git a/pkg/policystatus/main.go b/pkg/policystatus/main.go
index 3e633aaf82..b21ff2e505 100644
--- a/pkg/policystatus/main.go
+++ b/pkg/policystatus/main.go
@@ -2,16 +2,16 @@ package policystatus
 
 import (
 	"encoding/json"
+	"fmt"
 	"sync"
 	"time"
 
-	"github.com/golang/glog"
-
 	"k8s.io/apimachinery/pkg/util/wait"
 
 	"github.com/nirmata/kyverno/pkg/client/clientset/versioned"
 
 	v1 "github.com/nirmata/kyverno/pkg/api/kyverno/v1"
+	log "sigs.k8s.io/controller-runtime/pkg/log"
 )
 
 // Policy status implementation works in the following way,
@@ -111,8 +111,7 @@ func (s *Sync) updateStatusCache(stopCh <-chan struct{}) {
 			s.cache.keyToMutex.Get(statusUpdater.PolicyName()).Unlock()
 			oldStatus, _ := json.Marshal(status)
 			newStatus, _ := json.Marshal(updatedStatus)
-
-			glog.V(4).Infof("\nupdated status of policy - %v\noldStatus:\n%v\nnewStatus:\n%v\n", statusUpdater.PolicyName(), string(oldStatus), string(newStatus))
+			log.Log.V(4).Info(fmt.Sprintf("\nupdated status of policy - %v\noldStatus:\n%v\nnewStatus:\n%v\n", statusUpdater.PolicyName(), string(oldStatus), string(newStatus)))
 		case <-stopCh:
 			return
 		}
@@ -140,7 +139,7 @@ func (s *Sync) updatePolicyStatus() {
 			s.cache.dataMu.Lock()
 			delete(s.cache.data, policyName)
 			s.cache.dataMu.Unlock()
-			glog.V(4).Info(err)
+			log.Log.Error(err, "failed to update policy status")
 		}
 	}
 }
diff --git a/pkg/webhooks/mutation.go b/pkg/webhooks/mutation.go
index cd2a7dfdfd..68ca58fae1 100644
--- a/pkg/webhooks/mutation.go
+++ b/pkg/webhooks/mutation.go
@@ -7,7 +7,6 @@ import (
 
 	"github.com/nirmata/kyverno/pkg/openapi"
 
-	"github.com/golang/glog"
 	kyverno "github.com/nirmata/kyverno/pkg/api/kyverno/v1"
 	v1 "github.com/nirmata/kyverno/pkg/api/kyverno/v1"
 	"github.com/nirmata/kyverno/pkg/engine"
@@ -70,7 +69,7 @@ func (ws *WebhookServer) HandleMutation(request *v1beta1.AdmissionRequest, resou
 		}
 		err := openapi.ValidateResource(*engineResponse.PatchedResource.DeepCopy(), engineResponse.PatchedResource.GetKind())
 		if err != nil {
-			glog.V(4).Infoln(err)
+			logger.Error(err, "failed to validate resource")
 			continue
 		}
 		// gather patches