Log 4k write to file function
Change-Id: Ic297ce4aa25dce9e86395a26fae92e0530988255
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;