diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c
index 052d3fec4b921de79a27548661012da11ff53b8a..16bbfdb1d23c4d1d8aeb8c5a4f06bcafbc34c5c7 100644
--- a/src/channels/chan_voicemngr.c
+++ b/src/channels/chan_voicemngr.c
@@ -77,7 +77,7 @@
 
 #define LOGFILE "/tmp/chan_voicemngr.log"
 #define BUFLEN  6000000
-#define LOGRATE 100
+#define LOGRATE 1024 // Unit is byte
 
 static void chan_voicemngr_dialtone_set(struct chan_voicemngr_pvt *p, dialtone_state state);
 static int chan_voicemngr_signal_dialtone(struct chan_voicemngr_pvt *p);
@@ -3287,14 +3287,12 @@ static void audio_packet_handler(pe_packet_t *p) {
 	struct chan_voicemngr_pvt *pvt;
 	int sip_client_id = -1;
 	unsigned int*   packet_buf32 = (unsigned int*)ap->rtp;
-	unsigned short seqnum_start,seqnum_end;
 	static struct logbuf_t buff;
-	struct timeval difference;
-	static struct timeval earlier = {0,0};
-	static struct timeval later = {0,0};
-	float d_usec;
+	static struct timeval earlier = { 0, };
+	struct timeval later, difference;
 
-	logbuf_init (&buff, LOGFILE, BUFLEN, LOGRATE);
+	if (buff.inited != INITED)
+		logbuf_init(&buff, LOGFILE, BUFLEN, LOGRATE);
 
 	// Clear the RTP marker bit
 	if ((payload_type & RTP_MARKER_BIT) && (payload_type < RTCP_SR || payload_type > RTCP_XR))
@@ -3373,34 +3371,26 @@ static void audio_packet_handler(pe_packet_t *p) {
 	//ast_mutex_unlock(&sub->parent->lock);
 	//pvt_unlock(sub->parent);
 
-	//Get packet sequence number
-	seqnum_start = ap->rtp[2];
-	seqnum_end = ap->rtp[3];
-
-	//Get time and time difference
-	if(later.tv_usec == 0 && later.tv_sec == 0) {
-		time_delta(&later, &earlier, &difference);
-		gettimeofday(&later, NULL);
-		earlier = later;
-	} else {
-		gettimeofday(&later, NULL);
-		time_delta(&later, &earlier, &difference);
-		earlier = later;
-	}
-
-	//Write debug data into logbuf
-	if(payload_type < 200) {
-		if( difference.tv_usec < 1000) {
-			d_usec = difference.tv_usec;
-			logbuf (&buff, "%d:%d:%f\n", payload_type,((seqnum_start << 8) + seqnum_end), ((difference.tv_sec * 1000) + (d_usec / 1000)));
-		 } else {
-			logbuf (&buff, "%d:%d:%d\n", payload_type,((seqnum_start << 8) + seqnum_end), ((difference.tv_sec * 1000) + (difference.tv_usec / 1000)));
-		}
-	}
-
 	if (owner) {
 		if (!drop_frame && (ast_channel_state(owner) == AST_STATE_UP || ast_channel_state(owner) == AST_STATE_RING)) {
 			ast_queue_frame(owner, &frame);
+
+			// Calculate the interval of two adjacent RTP packets with payload G711
+			if (frame.frametype == AST_FRAME_VOICE && (payload_type == RTP_PT_PCMU || payload_type == RTP_PT_PCMA)) {
+				// Get time difference (interval). Skip the first packet since there is no way to compare with
+				gettimeofday(&later, NULL);
+				if (earlier.tv_sec != 0) {
+					time_delta(&later, &earlier, &difference);
+					// Write debug data into logbuf
+					if (difference.tv_usec < 1000) {
+						float d_usec = difference.tv_usec;
+						logbuf (&buff, "%d:%d:%f\n", payload_type, frame.seqno, ((difference.tv_sec * 1000) + (d_usec / 1000)));
+					} else {
+						logbuf (&buff, "%d:%d:%d\n", payload_type, frame.seqno, ((difference.tv_sec * 1000) + (difference.tv_usec / 1000)));
+					}
+				}
+				earlier = later;
+			}
 		}
 		ast_channel_unref(owner);
 	}