* lib/mu-log: allow for arbitrary long log lines

This commit is contained in:
djcb
2012-10-03 10:36:36 +03:00
parent abe17accc7
commit 542043989d

View File

@ -224,16 +224,16 @@ mu_log_uninit (void)
static const char* static const char*
pfx (GLogLevelFlags level) levelstr (GLogLevelFlags level)
{ {
switch (level) { switch (level) {
case G_LOG_LEVEL_WARNING: return "WARN"; case G_LOG_LEVEL_WARNING: return " [WARN] ";
case G_LOG_LEVEL_ERROR : return "ERR "; case G_LOG_LEVEL_ERROR : return " [ERR ] ";
case G_LOG_LEVEL_DEBUG: return "DBG "; case G_LOG_LEVEL_DEBUG: return " [DBG ] ";
case G_LOG_LEVEL_CRITICAL: return "CRIT"; case G_LOG_LEVEL_CRITICAL: return " [CRIT] ";
case G_LOG_LEVEL_MESSAGE: return "MSG "; case G_LOG_LEVEL_MESSAGE: return " [MSG ] ";
case G_LOG_LEVEL_INFO : return "INFO"; case G_LOG_LEVEL_INFO : return " [INFO] ";
default: return "LOG "; default: return " [LOG ] ";
} }
} }
@ -250,24 +250,32 @@ static void
log_write_fd (GLogLevelFlags level, const gchar *msg) log_write_fd (GLogLevelFlags level, const gchar *msg)
{ {
time_t now; time_t now;
ssize_t len; char timebuf [22];
const char *mylevel;
/* truncate at 768-1 chars */
char buf [768], timebuf [22];
/* get the time/date string */ /* get the time/date string */
now = time(NULL); now = time(NULL);
strftime (timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", strftime (timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S",
localtime(&now)); localtime(&now));
/* now put it all together */ if (write (MU_LOG->_fd, timebuf, strlen (timebuf)) < 0)
len = snprintf (buf, sizeof(buf), "%s [%s] %s\n", timebuf, goto err;
pfx(level), msg);
mylevel = levelstr (level);
if (write (MU_LOG->_fd, mylevel, strlen (mylevel)) < 0)
goto err;
if (write (MU_LOG->_fd, buf, (size_t)len) < 0) if (write (MU_LOG->_fd, msg, strlen (msg)) < 0)
fprintf (stderr, "%s: failed to write to log: %s\n", goto err;
__FUNCTION__, strerror(errno));
if (write (MU_LOG->_fd, "\n", strlen ("\n")) < 0)
goto err;
return; /* all went well */
err:
fprintf (stderr, "%s: failed to write to log: %s\n",
__FUNCTION__, strerror(errno));
} }