diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
index 39a8402..b034f47 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveEntityEventsListener.java
@@ -69,7 +69,7 @@
 public abstract class ActiveEntityEventsListener implements IActiveEntityController {
 
     private static final Logger LOGGER = LogManager.getLogger();
-    private static final Level level = Level.INFO;
+    private static final Level level = Level.DEBUG;
     private static final ActiveEvent STATE_CHANGED = new ActiveEvent(null, Kind.STATE_CHANGED, null, null);
     private static final EnumSet<ActivityState> TRANSITION_STATES = EnumSet.of(ActivityState.RESUMING,
             ActivityState.STARTING, ActivityState.STOPPING, ActivityState.RECOVERING, ActivityState.CANCELLING);
@@ -133,7 +133,9 @@
     }
 
     protected synchronized void setState(ActivityState newState) {
-        LOGGER.log(level, "State of " + getEntityId() + "is being set to " + newState + " from " + state);
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "State of " + getEntityId() + "is being set to " + newState + " from " + state);
+        }
         this.prevState = state;
         this.state = newState;
         if (newState == ActivityState.STARTING || newState == ActivityState.RECOVERING
@@ -148,7 +150,9 @@
     @Override
     public synchronized void notify(ActiveEvent event) {
         try {
-            LOGGER.log(level, "EventListener is notified.");
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "EventListener is notified.");
+            }
             ActiveEvent.Kind eventKind = event.getEventKind();
             switch (eventKind) {
                 case JOB_CREATED:
@@ -187,7 +191,9 @@
 
     @SuppressWarnings("unchecked")
     protected void finish(ActiveEvent event) throws HyracksDataException {
-        LOGGER.log(level, "the job " + jobId + " finished");
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "the job " + jobId + " finished");
+        }
         JobId lastJobId = jobId;
         if (numRegistered != numDeRegistered) {
             LOGGER.log(Level.WARN,
@@ -198,7 +204,9 @@
         Pair<JobStatus, List<Exception>> status = (Pair<JobStatus, List<Exception>>) event.getEventObject();
         JobStatus jobStatus = status.getLeft();
         List<Exception> exceptions = status.getRight();
-        LOGGER.log(level, "The job finished with status: " + jobStatus);
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "The job finished with status: " + jobStatus);
+        }
         if (!jobSuccessfullyTerminated(jobStatus)) {
             jobFailure = exceptions.isEmpty() ? new RuntimeDataException(ErrorCode.UNREPORTED_TASK_FAILURE_EXCEPTION)
                     : exceptions.get(0);
@@ -348,7 +356,9 @@
 
     @Override
     public synchronized void recover() {
-        LOGGER.log(level, "Recover is called on " + entityId);
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "Recover is called on " + entityId);
+        }
         if (retryPolicyFactory == NoRetryPolicyFactory.INSTANCE) {
             LOGGER.log(level, "But it has no recovery policy, so it is set to permanent failure");
             setState(ActivityState.STOPPED);
@@ -451,9 +461,13 @@
         try {
             Thread.currentThread().setName(nameBefore + " : WaitForCompletionForJobId: " + jobId);
             sendStopMessages(metadataProvider, timeout, unit);
-            LOGGER.log(Level.DEBUG, "Waiting for its state to become " + waitFor);
+            if (LOGGER.isDebugEnabled()) {
+                LOGGER.debug("Waiting for its state to become " + waitFor);
+            }
             subscriber.sync();
-            LOGGER.log(Level.DEBUG, "Disconnect has been completed " + waitFor);
+            if (LOGGER.isDebugEnabled()) {
+                LOGGER.debug("Disconnect has been completed " + waitFor);
+            }
         } catch (InterruptedException ie) {
             forceStop(subscriber, ie);
             Thread.currentThread().interrupt();
@@ -478,9 +492,13 @@
         ICCMessageBroker messageBroker = (ICCMessageBroker) applicationCtx.getServiceContext().getMessageBroker();
         AlgebricksAbsolutePartitionConstraint runtimeLocations = getLocations();
         int partition = 0;
-        LOGGER.log(Level.INFO, "Sending stop messages to " + runtimeLocations);
+        if (LOGGER.isInfoEnabled()) {
+            LOGGER.log(Level.INFO, "Sending stop messages to " + runtimeLocations);
+        }
         for (String location : runtimeLocations.getLocations()) {
-            LOGGER.log(Level.INFO, "Sending to " + location);
+            if (LOGGER.isInfoEnabled()) {
+                LOGGER.log(Level.INFO, "Sending to " + location);
+            }
             ActiveRuntimeId runtimeId = getActiveRuntimeId(partition++);
             messageBroker.sendApplicationMessageToNC(new ActiveManagerMessage(ActiveManagerMessage.Kind.STOP_ACTIVITY,
                     new StopRuntimeParameters(runtimeId, timeout, unit)), location);
@@ -542,10 +560,14 @@
         WaitForStateSubscriber subscriber;
         Future<Void> suspendTask;
         synchronized (this) {
-            LOGGER.log(level, "suspending entity " + entityId);
-            LOGGER.log(level, "Waiting for ongoing activities");
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "suspending entity " + entityId);
+                LOGGER.log(level, "Waiting for ongoing activities");
+            }
             waitForNonTransitionState();
-            LOGGER.log(level, "Proceeding with suspension. Current state is " + state);
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "Proceeding with suspension. Current state is " + state);
+            }
             if (state == ActivityState.STOPPED) {
                 suspended = true;
                 return;
@@ -575,7 +597,9 @@
             subscriber.sync();
         } catch (Exception e) {
             synchronized (this) {
-                LOGGER.log(Level.ERROR, "Failure while waiting for " + entityId + " to become suspended", e);
+                if (LOGGER.isErrorEnabled()) {
+                    LOGGER.log(Level.ERROR, "Failure while waiting for " + entityId + " to become suspended", e);
+                }
                 // failed to suspend
                 if (state == ActivityState.SUSPENDING) {
                     if (jobId != null) {
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
index 1b7d5b9..8ade9ec 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
@@ -52,7 +52,7 @@
         implements IActiveNotificationHandler, IJobLifecycleListener {
 
     private static final Logger LOGGER = LogManager.getLogger();
-    private static final Level level = Level.INFO;
+    private static final Level level = Level.DEBUG;
     public static final String ACTIVE_ENTITY_PROPERTY_NAME = "ActiveJob";
     private final Map<EntityId, IActiveEntityEventsListener> entityEventListeners;
     private final Map<JobId, EntityId> jobId2EntityId;
@@ -72,7 +72,9 @@
         EntityId entityId = jobId2EntityId.get(event.getJobId());
         if (entityId != null) {
             IActiveEntityEventsListener listener = entityEventListeners.get(entityId);
-            LOGGER.log(level, "Next event is of type " + event.getEventKind());
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "Next event is of type " + event.getEventKind());
+            }
             if (event.getEventKind() == Kind.JOB_FINISHED) {
                 LOGGER.log(level, "Removing the job");
                 jobId2EntityId.remove(event.getJobId());
@@ -90,11 +92,16 @@
 
     @Override
     public void notifyJobCreation(JobId jobId, JobSpecification jobSpecification) throws HyracksDataException {
-        LOGGER.log(level,
-                "notifyJobCreation(JobId jobId, JobSpecification jobSpecification) was called with jobId = " + jobId);
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level,
+                    "notifyJobCreation(JobId jobId, JobSpecification jobSpecification) was called with jobId = "
+                            + jobId);
+        }
         Object property = jobSpecification.getProperty(ACTIVE_ENTITY_PROPERTY_NAME);
         if (property == null || !(property instanceof EntityId)) {
-            LOGGER.log(level, "Job is not of type active job. property found to be: " + property);
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "Job is not of type active job. property found to be: " + property);
+            }
             return;
         }
         EntityId entityId = (EntityId) property;
@@ -105,17 +112,27 @@
     }
 
     private synchronized void monitorJob(JobId jobId, EntityId entityId) {
-        LOGGER.log(level, "monitorJob(JobId jobId, ActiveJob activeJob) called with job id: " + jobId);
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "monitorJob(JobId jobId, ActiveJob activeJob) called with job id: " + jobId);
+        }
         boolean found = jobId2EntityId.get(jobId) != null;
-        LOGGER.log(level, "Job was found to be: " + (found ? "Active" : "Inactive"));
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "Job was found to be: " + (found ? "Active" : "Inactive"));
+        }
         if (entityEventListeners.containsKey(entityId)) {
             if (jobId2EntityId.containsKey(jobId)) {
-                LOGGER.error("Job is already being monitored for job: " + jobId);
+                if (LOGGER.isErrorEnabled()) {
+                    LOGGER.error("Job is already being monitored for job: " + jobId);
+                }
                 return;
             }
-            LOGGER.log(level, "monitoring started for job id: " + jobId);
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "monitoring started for job id: " + jobId);
+            }
         } else {
-            LOGGER.info("No listener was found for the entity: " + entityId);
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.info("No listener was found for the entity: " + entityId);
+            }
         }
         jobId2EntityId.put(jobId, entityId);
     }
@@ -131,12 +148,16 @@
     @Override
     public synchronized void notifyJobFinish(JobId jobId, JobStatus jobStatus, List<Exception> exceptions)
             throws HyracksException {
-        LOGGER.log(level, "Getting notified of job finish for JobId: " + jobId);
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "Getting notified of job finish for JobId: " + jobId);
+        }
         EntityId entityId = jobId2EntityId.get(jobId);
         if (entityId != null) {
             add(new ActiveEvent(jobId, Kind.JOB_FINISHED, entityId, Pair.of(jobStatus, exceptions)));
         } else {
-            LOGGER.log(level, "NO NEED TO NOTIFY JOB FINISH!");
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "no need to notify job finish");
+            }
         }
     }
 
@@ -150,16 +171,22 @@
 
     @Override
     public IActiveEntityEventsListener getListener(EntityId entityId) {
-        LOGGER.log(level, "getActiveEntityListener(EntityId entityId) was called with entity " + entityId);
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "getActiveEntityListener(EntityId entityId) was called with entity " + entityId);
+        }
         IActiveEntityEventsListener listener = entityEventListeners.get(entityId);
-        LOGGER.log(level, "Listener found: " + listener);
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "Listener found: " + listener);
+        }
         return entityEventListeners.get(entityId);
     }
 
     @Override
     public synchronized IActiveEntityEventsListener[] getEventListeners() {
-        LOGGER.log(level, "getEventListeners() was called");
-        LOGGER.log(level, "returning " + entityEventListeners.size() + " Listeners");
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "getEventListeners() was called");
+            LOGGER.log(level, "returning " + entityEventListeners.size() + " Listeners");
+        }
         return entityEventListeners.values().toArray(new IActiveEntityEventsListener[entityEventListeners.size()]);
     }
 
@@ -168,8 +195,10 @@
         if (suspended) {
             throw new RuntimeDataException(ErrorCode.ACTIVE_NOTIFICATION_HANDLER_IS_SUSPENDED);
         }
-        LOGGER.log(level, "registerListener(IActiveEntityEventsListener listener) was called for the entity "
-                + listener.getEntityId());
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "registerListener(IActiveEntityEventsListener listener) was called for the entity "
+                    + listener.getEntityId());
+        }
         if (entityEventListeners.containsKey(listener.getEntityId())) {
             throw new RuntimeDataException(ErrorCode.ACTIVE_ENTITY_IS_ALREADY_REGISTERED, listener.getEntityId());
         }
@@ -181,8 +210,10 @@
         if (suspended) {
             throw new RuntimeDataException(ErrorCode.ACTIVE_NOTIFICATION_HANDLER_IS_SUSPENDED);
         }
-        LOGGER.log(level, "unregisterListener(IActiveEntityEventsListener listener) was called for the entity "
-                + listener.getEntityId());
+        if (LOGGER.isEnabled(level)) {
+            LOGGER.log(level, "unregisterListener(IActiveEntityEventsListener listener) was called for the entity "
+                    + listener.getEntityId());
+        }
         IActiveEntityEventsListener registeredListener = entityEventListeners.remove(listener.getEntityId());
         if (registeredListener == null) {
             throw new RuntimeDataException(ErrorCode.ACTIVE_ENTITY_LISTENER_IS_NOT_REGISTERED, listener.getEntityId());
@@ -208,10 +239,12 @@
 
     @Override
     public void recover() {
-        LOGGER.log(level, "Starting active recovery");
+        LOGGER.info("Starting active recovery");
         for (IActiveEntityEventsListener listener : getEventListeners()) {
             synchronized (listener) {
-                LOGGER.log(level, "Entity " + listener.getEntityId() + " is " + listener.getStats());
+                if (LOGGER.isEnabled(level)) {
+                    LOGGER.log(level, "Entity " + listener.getEntityId() + " is " + listener.getState());
+                }
                 listener.notifyAll();
             }
         }
@@ -233,7 +266,9 @@
             // exclusive lock all the datasets
             String dataverseName = listener.getEntityId().getDataverse();
             String entityName = listener.getEntityId().getEntityName();
-            LOGGER.log(level, "Suspending " + listener.getEntityId());
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "Suspending " + listener.getEntityId());
+            }
             LOGGER.log(level, "Acquiring locks");
             lockManager.acquireActiveEntityWriteLock(mdProvider.getLocks(), dataverseName + '.' + entityName);
             List<Dataset> datasets = ((ActiveEntityEventsListener) listener).getDatasets();
@@ -243,16 +278,22 @@
             }
             LOGGER.log(level, "locks acquired");
             ((ActiveEntityEventsListener) listener).suspend(mdProvider);
-            LOGGER.log(level, listener.getEntityId() + " suspended");
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, listener.getEntityId() + " suspended");
+            }
         }
     }
 
-    public void resume(MetadataProvider mdProvider) throws HyracksDataException, InterruptedException {
+    public void resume(MetadataProvider mdProvider) throws HyracksDataException {
         LOGGER.log(level, "Resuming active events handler");
         for (IActiveEntityEventsListener listener : entityEventListeners.values()) {
-            LOGGER.log(level, "Resuming " + listener.getEntityId());
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, "Resuming " + listener.getEntityId());
+            }
             ((ActiveEntityEventsListener) listener).resume(mdProvider);
-            LOGGER.log(level, listener.getEntityId() + " resumed");
+            if (LOGGER.isEnabled(level)) {
+                LOGGER.log(level, listener.getEntityId() + " resumed");
+            }
         }
         synchronized (this) {
             suspended = false;
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/executor/ActivityClusterPlanner.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/executor/ActivityClusterPlanner.java
index 3fe88bf..a88f9ad 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/executor/ActivityClusterPlanner.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/executor/ActivityClusterPlanner.java
@@ -74,11 +74,11 @@
 
         TaskCluster[] taskClusters = computeTaskClusters(ac, jobRun, activityPlanMap);
 
-        if (LOGGER.isInfoEnabled()) {
-            LOGGER.info("Plan for " + ac);
-            LOGGER.info("Built " + taskClusters.length + " Task Clusters");
+        if (LOGGER.isTraceEnabled()) {
+            LOGGER.trace("Plan for " + ac);
+            LOGGER.trace("Built " + taskClusters.length + " Task Clusters");
             for (TaskCluster tc : taskClusters) {
-                LOGGER.info("Tasks: " + Arrays.toString(tc.getTasks()));
+                LOGGER.trace("Tasks: " + Arrays.toString(tc.getTasks()));
             }
         }
 
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/partitions/PartitionMatchMaker.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/partitions/PartitionMatchMaker.java
index 6f5c5ad..ad338e3 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/partitions/PartitionMatchMaker.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/partitions/PartitionMatchMaker.java
@@ -174,7 +174,9 @@
     }
 
     public void removeUncommittedPartitions(Set<PartitionId> partitionIds, final Set<TaskAttemptId> taIds) {
-        LOGGER.info("Removing uncommitted partitions: " + partitionIds);
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("Removing uncommitted partitions: " + partitionIds);
+        }
         IEntryFilter<PartitionDescriptor> filter = new IEntryFilter<PartitionDescriptor>() {
             @Override
             public boolean matches(PartitionDescriptor o) {
@@ -193,7 +195,9 @@
     }
 
     public void removePartitionRequests(Set<PartitionId> partitionIds, final Set<TaskAttemptId> taIds) {
-        LOGGER.info("Removing partition requests: " + partitionIds);
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("Removing partition requests: " + partitionIds);
+        }
         IEntryFilter<PartitionRequest> filter = new IEntryFilter<PartitionRequest>() {
             @Override
             public boolean matches(PartitionRequest o) {
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/result/ResultDirectoryService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/result/ResultDirectoryService.java
index 0e7f6ee..cdfa4d3 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/result/ResultDirectoryService.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/result/ResultDirectoryService.java
@@ -28,19 +28,18 @@
 import java.util.concurrent.ExecutorService;
 
 import org.apache.hyracks.api.comm.NetworkAddress;
-import org.apache.hyracks.api.result.ResultDirectoryRecord;
-import org.apache.hyracks.api.result.ResultJobRecord;
-import org.apache.hyracks.api.result.ResultJobRecord.State;
-import org.apache.hyracks.api.result.IResultStateRecord;
-import org.apache.hyracks.api.result.ResultSetId;
-import org.apache.hyracks.api.result.ResultSetMetaData;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.HyracksException;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
 import org.apache.hyracks.api.job.JobStatus;
-import org.apache.hyracks.api.util.ExceptionUtils;
+import org.apache.hyracks.api.result.IResultStateRecord;
+import org.apache.hyracks.api.result.ResultDirectoryRecord;
+import org.apache.hyracks.api.result.ResultJobRecord;
+import org.apache.hyracks.api.result.ResultJobRecord.State;
+import org.apache.hyracks.api.result.ResultSetId;
+import org.apache.hyracks.api.result.ResultSetMetaData;
 import org.apache.hyracks.control.common.result.AbstractResultManager;
 import org.apache.hyracks.control.common.result.ResultStateSweeper;
 import org.apache.hyracks.control.common.work.IResultCallback;
@@ -76,8 +75,8 @@
 
     @Override
     public synchronized void notifyJobCreation(JobId jobId, JobSpecification spec) throws HyracksException {
-        if (LOGGER.isInfoEnabled()) {
-            LOGGER.info(getClass().getSimpleName() + " notified of new job " + jobId);
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug(getClass().getSimpleName() + " notified of new job " + jobId);
         }
         if (jobResultLocations.get(jobId) != null) {
             throw HyracksDataException.create(ErrorCode.MORE_THAN_ONE_RESULT, jobId);
@@ -148,18 +147,16 @@
     @Override
     public synchronized void reportJobFailure(JobId jobId, List<Exception> exceptions) {
         Exception ex = exceptions.isEmpty() ? null : exceptions.get(0);
-        Level logLevel = ExceptionUtils.causedByInterrupt(ex) ? Level.DEBUG : Level.INFO;
-        LOGGER.log(logLevel, "job " + jobId + " failed and is being reported to " + getClass().getSimpleName(), ex);
+        Level logLevel = Level.DEBUG;
+        if (LOGGER.isEnabled(logLevel)) {
+            LOGGER.log(logLevel, "job " + jobId + " failed and is being reported to " + getClass().getSimpleName(), ex);
+        }
         ResultJobRecord rjr = getResultJobRecord(jobId);
-        LOGGER.log(logLevel, "Result job record is " + rjr);
         if (rjr != null) {
-            LOGGER.log(logLevel, "Setting exceptions in Result job record");
             rjr.fail(exceptions);
         }
         final JobResultInfo jobResultInfo = jobResultLocations.get(jobId);
-        LOGGER.log(logLevel, "Job result info is " + jobResultInfo);
         if (jobResultInfo != null) {
-            LOGGER.log(logLevel, "Setting exceptions in Job result info");
             jobResultInfo.setException(ex);
         }
         notifyAll();
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/result/ResultPartitionWriter.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/result/ResultPartitionWriter.java
index f25bc58..53f66e7 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/result/ResultPartitionWriter.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/result/ResultPartitionWriter.java
@@ -79,8 +79,8 @@
 
     @Override
     public void open() {
-        if (LOGGER.isInfoEnabled()) {
-            LOGGER.info("open(" + partition + ")");
+        if (LOGGER.isTraceEnabled()) {
+            LOGGER.trace("open(" + partition + ")");
         }
         partitionRegistered = false;
         resultState.open();
@@ -105,8 +105,8 @@
 
     @Override
     public void close() throws HyracksDataException {
-        if (LOGGER.isInfoEnabled()) {
-            LOGGER.info("close(" + partition + ")");
+        if (LOGGER.isTraceEnabled()) {
+            LOGGER.trace("close(" + partition + ")");
         }
         try {
             if (!failed) {
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/collectors/NonDeterministicChannelReader.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/collectors/NonDeterministicChannelReader.java
index 3b5c9b1..d8dc4b9 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/collectors/NonDeterministicChannelReader.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/collectors/NonDeterministicChannelReader.java
@@ -151,8 +151,10 @@
     public synchronized void notifyFailure(IInputChannel channel, int errorCode) {
         PartitionId pid = (PartitionId) channel.getAttachment();
         int senderIndex = pid.getSenderIndex();
-        LOGGER.warn("Failure: " + pid.getConnectorDescriptorId() + " sender: " + senderIndex + " receiver: "
-                + pid.getReceiverIndex());
+        if (LOGGER.isTraceEnabled()) {
+            LOGGER.trace("Failure: " + pid.getConnectorDescriptorId() + " sender: " + senderIndex + " receiver: "
+                    + pid.getReceiverIndex());
+        }
         // Note: if a remote failure overwrites the value of localFailure, then we rely on
         // the fact that the remote task will notify the cc of the failure.
         // Otherwise, the local task must fail
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
index b35cefe..262943a 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
@@ -967,8 +967,8 @@
         if (LOGGER.isEnabled(fileOpsLevel)) {
             LOGGER.log(fileOpsLevel, "Closing file: " + fileId + " in cache: " + this);
         }
-        if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug(dumpState());
+        if (LOGGER.isTraceEnabled()) {
+            LOGGER.trace(dumpState());
         }
 
         synchronized (fileInfoMap) {
