diff --git a/mbtk/mbtk_logd/syslog_read.c b/mbtk/mbtk_logd/syslog_read.c
index bfc70ba..36df306 100755
--- a/mbtk/mbtk_logd/syslog_read.c
+++ b/mbtk/mbtk_logd/syslog_read.c
@@ -67,6 +67,8 @@
 #define    SYSLOG_BUFF_SIZE (4*1024)
 #define    MAX_BUFFER_SIZE (8*1024)
 
+extern int tmp_syslog_fd;
+extern char syslog_buff[MAX_BUFFER_SIZE];
 
 static const struct blobmsg_policy log_policy[] = {
 	[LOG_MSG] = { .name = "msg", .type = BLOBMSG_TYPE_STRING },
@@ -195,7 +197,8 @@
 
 
     snprintf(tmp_buf,sizeof(tmp_buf), "%s", log_file);
-    if(access(tmp_buf, W_OK) != 0)
+    
+    if(fcntl(sender.fd, F_GETFL) == -1 || access(tmp_buf, W_OK) != 0)
     {
         sender.fd = open(tmp_buf, O_CREAT | O_WRONLY | O_APPEND, 0600);
         if(sender.fd < 0)
@@ -203,6 +206,7 @@
             perror("Failed to open file ");
             return -1;
         }
+        tmp_syslog_fd = sender.fd;
     }
 
 
@@ -211,14 +215,15 @@
 	if (!tb[LOG_ID] || !tb[LOG_PRIO] || !tb[LOG_SOURCE] || !tb[LOG_TIME] || !tb[LOG_MSG])
 		return 1;
 
-    if ((log_type == LOG_FILE) && log_size && (!stat(tmp_log, &s)) && (s.st_size > log_size))
+    if ((log_type == LOG_FILE) && log_size && (!stat(log_file, &s)) && (s.st_size > log_size))
     {
             sender.fd = get_rotate_file(sender.fd, log_file, &file_list);
             if (sender.fd < 0)
             {
-                fprintf(stderr, "failed to open %s: %s\n", tmp_log, strerror(errno));
+                fprintf(stderr, "failed to open %s: %s\n", log_file, strerror(errno));
                 exit(-1);
             }
+            tmp_syslog_fd = sender.fd;
     }
 
 	m = blobmsg_get_string(tb[LOG_MSG]);
@@ -279,29 +284,24 @@
                         buf[index] ^= 1;
                     }
                 }
-
-
-
-        if (buffer_index >= SYSLOG_BUFF_SIZE)
+        
+        if(buffer_index + len >= SYSLOG_BUFF_SIZE && buffer_index < SYSLOG_BUFF_SIZE)
         {
-            // Flush the buffer if it's full
-            if (write(sender.fd, buffer, buffer_index) < 0)
-            {
-                perror("write error");
-                return -1;
-            }
-            buffer_index = 0; // Reset buffer index after flushing
-        }
-
-        if(len < SYSLOG_BUFF_SIZE)
-        {
-            //copy buf to buffer
             memcpy(buffer + buffer_index, buf, len);
             buffer_index += len;
+            if (write(sender.fd, buffer, buffer_index) < 0) 
+            {
+                perror("write error");
+                close(sender.fd);
+                return -1;
+            }
+            buffer_index = 0;
         }
         else
         {
-            mbtk_write(sender.fd, buf, len);
+            memcpy(buffer + buffer_index, buf, len);
+            buffer_index += len;
+            memcpy(syslog_buff,buffer,buffer_index);
         }
 
 
@@ -619,6 +619,7 @@
 				fprintf(stderr, "failed to open %s: %s\n", tmp_log, strerror(errno));
 				exit(-1);
 			}
+            tmp_syslog_fd = sender.fd;
 		} else {
 			sender.fd = STDOUT_FILENO;
 		}
