#include <assert.h>
#endif
-#define LOG_BUF_SIZE 1024
-
#define VALUE_MAX 2
#define LOG_CONFIG_FILE TZ_SYS_ETC"/dlog.conf"
+/*
+ * LOG_ATOMIC_SIZE is calculated according to kernel value
+ * 976 = 1024(size of log line) - 48(size of max prefix length)
+ */
+#define LOG_ATOMIC_SIZE 976
+#define LOG_MAX_SIZE 4076
+
#ifndef DLOG_BACKEND_JOURNAL
static int log_fds[(int)LOG_ID_MAX] = { -1, -1, -1, -1 };
static char log_devs[LOG_ID_MAX][PATH_MAX];
}
#if DLOG_BACKEND_KMSG
+
static int __write_to_log_kmsg(log_id_t log_id, log_priority prio, const char *tag, const char *msg)
{
ssize_t ret;
int log_fd;
- size_t len;
- char buf[LOG_BUF_SIZE];
+ ssize_t prefix_len, written_len, last_msg_len;
+ char buf[LOG_ATOMIC_SIZE];
+ const char *msg_ptr = msg;
if (log_id < LOG_ID_MAX)
log_fd = log_fds[log_id];
if (!msg)
return DLOG_ERROR_INVALID_PARAMETER;
- len = snprintf(buf, LOG_BUF_SIZE, "%s;%d;%s", tag, prio, msg);
+ ret = 0;
+ prefix_len = strlen(tag) + 3;
+ while (1) {
+ last_msg_len = snprintf(buf, LOG_ATOMIC_SIZE, "%s;%d;%s", tag, prio, msg_ptr);
+ written_len = write(log_fd, buf,
+ last_msg_len < LOG_ATOMIC_SIZE - 1 ? last_msg_len : LOG_ATOMIC_SIZE - 1);
- ret = write(log_fd, buf, len > LOG_BUF_SIZE ? LOG_BUF_SIZE : len);
- if (ret < 0)
- ret = -errno;
+ if (written_len < 0)
+ return -errno;
+
+ ret += (written_len - prefix_len);
+ msg_ptr += (written_len - prefix_len);
+
+ if (*(msg_ptr) == '\0')
+ break;
+ }
return ret;
}
#elif DLOG_BACKEND_LOGGER
+
static int __write_to_log_logger(log_id_t log_id, log_priority prio, const char *tag, const char *msg)
{
ssize_t ret;
int __dlog_vprint(log_id_t log_id, int prio, const char *tag, const char *fmt, va_list ap)
{
int ret;
- char buf[LOG_BUF_SIZE];
+ char buf[LOG_MAX_SIZE];
if (write_to_log == NULL)
__dlog_init();
if (ret < 0)
return ret;
- vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
+ vsnprintf(buf, LOG_MAX_SIZE, fmt, ap);
ret = write_to_log(log_id, prio, tag, buf);
#ifdef FATAL_ON
__dlog_fatal_assert(prio);
{
int ret;
va_list ap;
- char buf[LOG_BUF_SIZE];
+ char buf[LOG_MAX_SIZE];
if (write_to_log == NULL)
__dlog_init();
return ret;
va_start(ap, fmt);
- vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
+ vsnprintf(buf, LOG_MAX_SIZE, fmt, ap);
va_end(ap);
ret = write_to_log(log_id, prio, tag, buf);
int dlog_vprint(log_priority prio, const char *tag, const char *fmt, va_list ap)
{
- char buf[LOG_BUF_SIZE];
+ char buf[LOG_MAX_SIZE];
if (write_to_log == NULL)
__dlog_init();
- vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
+ vsnprintf(buf, LOG_MAX_SIZE, fmt, ap);
return write_to_log(LOG_ID_APPS, prio, tag, buf);
}
int dlog_print(log_priority prio, const char *tag, const char *fmt, ...)
{
va_list ap;
- char buf[LOG_BUF_SIZE];
+ char buf[LOG_MAX_SIZE];
if (write_to_log == NULL)
__dlog_init();
va_start(ap, fmt);
- vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
+ vsnprintf(buf, LOG_MAX_SIZE, fmt, ap);
va_end(ap);
return write_to_log(LOG_ID_APPS, prio, tag, buf);