diff --git a/internal/pkg/controller/addflows.go b/internal/pkg/controller/addflows.go
index 7524d00..894127b 100644
--- a/internal/pkg/controller/addflows.go
+++ b/internal/pkg/controller/addflows.go
@@ -53,7 +53,7 @@
 // Name to add flow task
 func (aft *AddFlowsTask) Name() string {
 	for _, flow := range aft.flow.SubFlows {
-		logger.Infow(ctx, "Flow Cookies", log.Fields{"Cookie": flow.Cookie})
+		logger.Debugw(ctx, "Flow Cookies", log.Fields{"Cookie": flow.Cookie})
 	}
 	return "Add Flows Task"
 }
@@ -81,7 +81,7 @@
 	flowsPresent := 0
 	// First add/delete the flows first locally before passing them to actual device
 	for _, flow := range aft.flow.SubFlows {
-		logger.Infow(ctx, "Flow Mod Request", log.Fields{"Cookie": flow.Cookie, "Oper": aft.flow.Command, "Port": aft.flow.PortID})
+		logger.Debugw(ctx, "Flow Mod Request", log.Fields{"Cookie": flow.Cookie, "Oper": aft.flow.Command, "Port": aft.flow.PortID})
 		if aft.flow.Command == of.CommandAdd {
 			flow.State = of.FlowAddPending
 			if err = aft.device.AddFlow(ctx, flow); err != nil {
diff --git a/internal/pkg/controller/auditdevice.go b/internal/pkg/controller/auditdevice.go
index fd2e8c8..a0c89e4 100644
--- a/internal/pkg/controller/auditdevice.go
+++ b/internal/pkg/controller/auditdevice.go
@@ -84,7 +84,7 @@
 
 // Start to start the task
 func (ad *AuditDevice) Start(ctx context.Context, taskID uint8) error {
-	logger.Infow(ctx, "Audit Device Task Triggered", log.Fields{"Context": ctx, "taskId": taskID, "Device": ad.device.ID})
+	logger.Debugw(ctx, "Audit Device Task Triggered", log.Fields{"Context": ctx, "taskId": taskID, "Device": ad.device.ID})
 	ad.taskID = taskID
 	ad.ctx = ctx
 
@@ -125,7 +125,7 @@
 			} else {
 				//To ensure the flows are in sync with port status and no mismatch due to reboot,
 				// repush/delete flows based on current port status
-				logger.Infow(ctx, "Port State Processing", log.Fields{"Port": vgcPort.ID, "OfpPort": ofpPort.PortNo, "ReceivedState": ofpPort.State, "CurrentState": vgcPort.State})
+				logger.Debugw(ctx, "Port State Processing", log.Fields{"Port": vgcPort.ID, "OfpPort": ofpPort.PortNo, "ReceivedState": ofpPort.State, "CurrentState": vgcPort.State})
 				ad.device.ProcessPortStateAfterReboot(ctx, ofpPort.PortNo, ofpPort.State)
 			}
 			delete(missingPorts, id)
@@ -139,7 +139,7 @@
 
 	// 1st process the NNI port before all other ports so that the device state can be updated.
 	if vgcPort, ok := ad.device.PortsByID[NNIPortID]; ok {
-		logger.Infow(ctx, "Processing NNI port state", log.Fields{"PortNo": vgcPort.ID, "PortName": vgcPort.Name, "PortState": vgcPort.State})
+		logger.Debugw(ctx, "Processing NNI port state", log.Fields{"PortNo": vgcPort.ID, "PortName": vgcPort.Name, "PortState": vgcPort.State})
 		processPortState(NNIPortID, vgcPort)
 	}
 
@@ -162,7 +162,7 @@
 	ad.AddMissingPorts(ctx, missingPorts)
 	ad.DelExcessPorts(ctx, excessPorts)
 	ad.device.deviceAuditInProgress = false
-	logger.Infow(ctx, "Audit Device Task Completed", log.Fields{"Context": ctx, "taskId": taskID, "Device": ad.device.ID})
+	logger.Debugw(ctx, "Audit Device Task Completed", log.Fields{"Context": ctx, "taskId": taskID, "Device": ad.device.ID})
 	return nil
 }
 
@@ -174,7 +174,7 @@
 		logger.Debugw(ctx, "Process Port Add Ind", log.Fields{"Port No": mp.PortNo, "Port Name": mp.Name})
 
 		// Error is ignored as it only drops duplicate ports
-		logger.Infow(ctx, "Calling AddPort", log.Fields{"No": mp.PortNo, "Name": mp.Name})
+		logger.Debugw(ctx, "Calling AddPort", log.Fields{"No": mp.PortNo, "Name": mp.Name})
 		if err := ad.device.AddPort(cntx, mp); err != nil {
 			logger.Warnw(ctx, "AddPort Failed", log.Fields{"Port No": mp.PortNo, "Port Name": mp.Name, "Reason": err})
 		}
@@ -202,7 +202,7 @@
 	logger.Debugw(ctx, "Device Audit - Delete Excess Ports", log.Fields{"NumPorts": len(eps)})
 	for _, id := range eps {
 		// Now delete the port from the device @ VGC
-		logger.Infow(ctx, "Device Audit - Deleting Port", log.Fields{"PortId": id})
+		logger.Debugw(ctx, "Device Audit - Deleting Port", log.Fields{"PortId": id})
 		if err := ad.device.DelPort(cntx, id); err != nil {
 			logger.Warnw(ctx, "DelPort Failed", log.Fields{"PortId": id, "Reason": err})
 		}
diff --git a/internal/pkg/controller/audittables.go b/internal/pkg/controller/audittables.go
index b22770c..b4557cd 100644
--- a/internal/pkg/controller/audittables.go
+++ b/internal/pkg/controller/audittables.go
@@ -79,7 +79,7 @@
 // Start is called by the framework and is responsible for implementing
 // the actual task.
 func (att *AuditTablesTask) Start(ctx context.Context, taskID uint8) error {
-	logger.Infow(ctx, "Audit Table Task Triggered", log.Fields{"Context": ctx, "taskId": taskID, "Device": att.device.ID})
+	logger.Debugw(ctx, "Audit Table Task Triggered", log.Fields{"Context": ctx, "taskId": taskID, "Device": att.device.ID})
 	att.taskID = taskID
 	att.ctx = ctx
 	var errInfo error
@@ -113,7 +113,7 @@
 	// to avoid flow dependency error during group deletion
 	logger.Debugw(ctx, "Excess Groups", log.Fields{"Groups": rcvdGroups})
 	att.DelExcessGroups(rcvdGroups)
-	logger.Infow(ctx, "Audit Table Task Completed", log.Fields{"Context": ctx, "taskId": taskID, "Device": att.device.ID})
+	logger.Debugw(ctx, "Audit Table Task Completed", log.Fields{"Context": ctx, "taskId": taskID, "Device": att.device.ID})
 	return errInfo
 }
 
@@ -398,18 +398,18 @@
 	for _, group := range g.Items {
 		rcvdGroups[group.Desc.GroupId] = group.Desc
 	}
-	logger.Infow(ctx, "Received Groups", log.Fields{"Groups": rcvdGroups})
+	logger.Debugw(ctx, "Received Groups", log.Fields{"Groups": rcvdGroups})
 
 	// Verify all groups that are in the controller but not in the device
 	att.device.groups.Range(att.compareGroupEntries)
 
 	if !att.stop {
 		// Add the groups missing at the device
-		logger.Infow(ctx, "Missing Groups", log.Fields{"Groups": groupsToAdd})
+		logger.Debugw(ctx, "Missing Groups", log.Fields{"Groups": groupsToAdd})
 		att.AddMissingGroups(groupsToAdd)
 
 		// Update groups with group member mismatch
-		logger.Infow(ctx, "Modify Groups", log.Fields{"Groups": groupsToMod})
+		logger.Debugw(ctx, "Modify Groups", log.Fields{"Groups": groupsToMod})
 		att.UpdateMismatchGroups(groupsToMod)
 
 		// Note: Excess groups will be deleted after ensuring the connected
@@ -607,7 +607,7 @@
 		logger.Debugw(ctx, "Process Port Add Ind", log.Fields{"Port No": mp.PortNo, "Port Name": mp.Name})
 
 		// Error is ignored as it only drops duplicate ports
-		logger.Infow(ctx, "Calling AddPort", log.Fields{"No": mp.PortNo, "Name": mp.Name})
+		logger.Debugw(ctx, "Calling AddPort", log.Fields{"No": mp.PortNo, "Name": mp.Name})
 		if err := att.device.AddPort(cntx, mp); err != nil {
 			logger.Warnw(ctx, "AddPort Failed", log.Fields{"No": mp.PortNo, "Name": mp.Name, "Reason": err})
 		}
@@ -635,7 +635,7 @@
 	logger.Debugw(ctx, "Device Audit - Delete Excess Ports", log.Fields{"NumPorts": len(eps)})
 	for _, id := range eps {
 		// Now delete the port from the device @ VGC
-		logger.Infow(ctx, "Device Audit - Deleting Port", log.Fields{"PortId": id})
+		logger.Debugw(ctx, "Device Audit - Deleting Port", log.Fields{"PortId": id})
 		if err := att.device.DelPort(cntx, id); err != nil {
 			logger.Warnw(ctx, "DelPort Failed", log.Fields{"PortId": id, "Reason": err})
 		}
diff --git a/internal/pkg/controller/device.go b/internal/pkg/controller/device.go
index 193c3fb..129b935 100644
--- a/internal/pkg/controller/device.go
+++ b/internal/pkg/controller/device.go
@@ -1103,6 +1103,6 @@
 		AdditionalData: bwDetails,
 	}
 
-	logger.Infow(ctx, "Sending Flow Notification", log.Fields{"Cookie": cookie, "Error Code": statusCode, "FlowOp": oper})
+	logger.Debugw(ctx, "Sending Flow Notification", log.Fields{"Cookie": cookie, "Error Code": statusCode, "FlowOp": oper})
 	GetController().ProcessFlowModResultIndication(cntx, flowResult)
 }
