diff --git a/mbtk/mbtk_logd/syslog_read.c b/mbtk/mbtk_logd/syslog_read.c
index 8af9dac..94f16a8 100755
--- a/mbtk/mbtk_logd/syslog_read.c
+++ b/mbtk/mbtk_logd/syslog_read.c
@@ -59,6 +59,10 @@
 	LOG_TIME,
 	__LOG_MAX
 };
+    
+#define    SYSLOG_BUFF_SIZE (4*1024)
+#define    MAX_BUFFER_SIZE (8*1024)
+
 
 static const struct blobmsg_policy log_policy[] = {
 	[LOG_MSG] = { .name = "msg", .type = BLOBMSG_TYPE_STRING },
@@ -179,6 +183,9 @@
 	time_t t;
 	char *c, *m;
 
+    static char buffer[MAX_BUFFER_SIZE] = {0};
+    static int buffer_index = 0;
+    
 	//
 	//sprintf(tmp_buf, "/tmp/log%s", strstr_tail(log_file, "/"));
 
@@ -187,24 +194,28 @@
     if(access(tmp_buf, W_OK) != 0)
     {
         sender.fd = open(tmp_buf, O_CREAT | O_WRONLY | O_APPEND, 0600);
+        if(sender.fd < 0)
+        {
+            perror("Failed to open file ");
+            return -1;
+        }
     }
-
-    if (sender.fd < 0)
-    {
-        return 0;
-    }
-
+    
+    
+   
 	blobmsg_parse(log_policy, ARRAY_SIZE(log_policy), tb, blob_data(msg), blob_len(msg));
 	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)) {
-        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));
-			exit(-1);
-        }
-	}
+    if ((log_type == LOG_FILE) && log_size && (!stat(tmp_log, &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));
+                exit(-1);
+            }
+    }
 
 	m = blobmsg_get_string(tb[LOG_MSG]);
 	t = blobmsg_get_u64(tb[LOG_TIME]) / 1000;
@@ -219,7 +230,8 @@
         return 0;
         //exit(-1);
     }
-	if (log_type == LOG_NET) {
+	if (log_type == LOG_NET) 
+	{
 		int err;
 
 		snprintf(buf, sizeof(buf), "<%u>", p);
@@ -248,7 +260,9 @@
 			sender.fd = -1;
 			uloop_timeout_set(&retry, 1000);
 		}
-	} else {
+	} 
+	else 
+	{
 		snprintf(buf, sizeof(buf), "%s %s.%s%s %s\n",
 			c, getcodetext(LOG_FAC(p) << 3, facilitynames), getcodetext(LOG_PRI(p), prioritynames),
 			(blobmsg_get_u32(tb[LOG_SOURCE])) ? ("") : (" kernel:"), m);
@@ -261,12 +275,37 @@
                         buf[index] ^= 1;
                     }
                 }
-		write(sender.fd, buf, strlen(buf));
+                
+
+         
+        if (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;
+        }
+        else
+        {
+            write(sender.fd, buf, len);
+        }
+        
+       
 	}
 
 	free(str);
-	if (log_type == LOG_FILE)
-		fsync(sender.fd);
+	//if (log_type == LOG_FILE)
+	//fsync(sender.fd);
 
 	return 0;
 }
@@ -569,6 +608,7 @@
 			
 			//直接将log文件存储在不会掉电丢失的路径
 			snprintf(tmp_log,sizeof(tmp_log), "%s",log_file);
+            
 			sender.fd = open(tmp_log, O_CREAT | O_WRONLY| O_APPEND, 0600);
 			if (sender.fd < 0) {
 				fprintf(stderr, "failed to open %s: %s\n", tmp_log, strerror(errno));
@@ -577,7 +617,6 @@
 		} else {
 			sender.fd = STDOUT_FILENO;
 		}
-
 		ubus_invoke_async(ctx, id, "read", b.head, &req);
 		req.fd_cb = logread_fd_cb;
 		req.complete_cb = logread_complete_cb;
