diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java
index 42159be..290734f 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java
@@ -102,7 +102,7 @@
     public synchronized void masterFlush(long masterLsn, long localLsn) throws HyracksDataException {
         final IndexCheckpoint latest = getLatest();
         latest.getMasterNodeFlushMap().put(masterLsn, localLsn);
-        LOGGER.debug("index {} master flush {} -> {}", indexPath, masterLsn, localLsn);
+        LOGGER.trace("index {} master flush {} -> {}", indexPath, masterLsn, localLsn);
         final IndexCheckpoint next = IndexCheckpoint.next(latest, latest.getLowWatermark(),
                 latest.getValidComponentSequence(), latest.getLastComponentId(), null);
         persist(next);
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/RemoteLogsProcessor.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/RemoteLogsProcessor.java
index 63e194e..b094d9e 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/RemoteLogsProcessor.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/RemoteLogsProcessor.java
@@ -47,8 +47,7 @@
     public void process(ByteBuffer logsBatch, RemoteLogRecord reusableLog, IReplicationWorker worker) {
         while (logsBatch.hasRemaining()) {
             // get rid of log size
-            int batchSize = logsBatch.getInt();
-            LOGGER.debug("received logs batch size {} from {}", batchSize, worker.getRemoteAddress());
+            logsBatch.getInt();
             reusableLog.readRemoteLog(logsBatch);
             reusableLog.setLogSource(LogSource.REMOTE);
             switch (reusableLog.getLogType()) {
@@ -75,8 +74,6 @@
                     flushLog.setRequester(this);
                     flushLog.setLogSource(LogSource.REMOTE);
                     flushLog.setMasterLsn(reusableLog.getLSN());
-                    LOGGER.debug("received master LSN {} for partition {}", reusableLog.getLSN(),
-                            reusableLog.getResourcePartition());
                     logManager.log(flushLog);
                     break;
                 default:
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/ReplicationLogBuffer.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/ReplicationLogBuffer.java
index 3c13825..2ed2ac9 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/ReplicationLogBuffer.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/ReplicationLogBuffer.java
@@ -23,12 +23,9 @@
 
 import org.apache.asterix.common.transactions.ILogRecord;
 import org.apache.asterix.replication.management.LogReplicationManager;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 
 public class ReplicationLogBuffer {
 
-    private static final Logger LOGGER = LogManager.getLogger();
     private final int logBufferSize;
     private final AtomicBoolean full;
     private int appendOffset;
@@ -120,7 +117,6 @@
     private void transferBuffer(ByteBuffer buffer) {
         if (buffer.remaining() <= batchSize) {
             //the current batch can be sent as it is
-            LOGGER.debug("sending txn logs batch size {}", buffer.remaining());
             replicationManager.transferBatch(buffer);
             return;
         }
@@ -146,7 +142,6 @@
                 //return to the beginning of the batch position
                 buffer.reset();
             }
-            LOGGER.debug("sending logs slice size {}", buffer.remaining());
             replicationManager.transferBatch(buffer);
             //return the original limit to check the new remaining size
             buffer.limit(totalTransferLimit);
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/LogReplicationManager.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/LogReplicationManager.java
index b76fa25..f1d8d4d 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/LogReplicationManager.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/LogReplicationManager.java
@@ -131,9 +131,6 @@
                 ackTracker.track(logRecord, new HashSet<>(destinations.keySet()));
             }
         }
-        if (logRecord.getLogType() == LogType.FLUSH) {
-            LOGGER.debug("appending flush lsn {} to replication queue", logRecord.getLSN());
-        }
         appendToLogBuffer(logRecord);
     }
 
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateLogsTask.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateLogsTask.java
index 67c8eba..b67a71e 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateLogsTask.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateLogsTask.java
@@ -64,7 +64,7 @@
                 logsBuffer = ReplicationProtocol.readRequest(channel, logsBuffer);
                 // check if it is end of handshake
                 if (logsBuffer.remaining() == END_REPLICATION_LOG_SIZE) {
-                    LOGGER.info("ending log replication with {}", worker.getRemoteAddress());
+                    LOGGER.debug("ending log replication with {}", worker.getRemoteAddress());
                     break;
                 }
                 logsProcessor.process(logsBuffer, reusableLog, worker);
