void ddb_vlog (const char *fmt, va_list ap) { char text[2048]; (void) vsnprintf(text, sizeof (text), fmt, ap); _log_internal (NULL, 0, text); }
void ddb_log (const char *fmt, ...) { char text[2048]; va_list ap; va_start(ap, fmt); (void) vsnprintf(text, sizeof (text), fmt, ap); va_end(ap); _log_internal (NULL, 0, text); }
void ddb_vlog_detailed (DB_plugin_t *plugin, uint32_t layers, const char *fmt, va_list ap) { if (!_is_log_visible(plugin, layers)) { return; } char text[2048]; (void) vsnprintf(text, sizeof (text), fmt, ap); _log_internal (plugin, layers, text); }
void _log(const char *file, const char *func, int line, const char *fmt, ...) { #define STRLEN 256 struct logger *l = &logger; int len, size, errno_save; char buf[LOG_MAX_LEN] = {0}, stamp[STRLEN] = {0}; va_list args; int n = 0; if (l->inited == 0) { _log_stderr(fmt); return; } if (l->fd < 0) { return; } errno_save = errno; len = 0; /* length of output buffer */ size = LOG_MAX_LEN; /* size of output buffer */ get_timestamp(stamp, STRLEN); len += snprintf(buf + len, size - len, "[%s] %s:%s:%d ", stamp, file, func, line); va_start(args, fmt); len += vsnprintf(buf + len, size - len, fmt, args); va_end(args); if (buf[len - 1] != '\n') { buf[len++] = '\n'; buf[len] = '\0'; } _log_internal(buf, len); errno = errno_save; }
/* * Hexadecimal dump in the canonical hex + ascii display * See -C option in man hexdump */ void _log_hexdump(const char *file, const char *func, int line, char *data, int datalen, const char *fmt, ...) { struct logger *l = &logger; char buf[8 * LOG_MAX_LEN]; int i, off, len, size, errno_save; ssize_t n; if (l->fd < 0 || l->inited > 0) { return; } /* log hexdump */ errno_save = errno; off = 0; /* data offset */ len = 0; /* length of output buffer */ size = 8 * LOG_MAX_LEN; /* size of output buffer */ while (datalen != 0 && (len < size - 1)) { char *save, *str; unsigned char c; int savelen; len += snprintf(buf + len, size - len, "%08x ", off); save = data; savelen = datalen; for (i = 0; datalen != 0 && i < 16; data++, datalen--, i++) { c = (unsigned char)(*data); str = (i == 7) ? (char *)" " : (char *)" "; len += snprintf(buf + len, size - len, "%02x%s", c, str); } for (; i < 16; i++) { str = (i == 7) ? (char *)" " : (char *)" "; len += snprintf(buf + len, size - len, " %s", str); } data = save; datalen = savelen; len += snprintf(buf + len, size - len, " |"); for (i = 0; datalen != 0 && i < 16; data++, datalen--, i++) { c = (unsigned char)(isprint(*data) ? *data : '.'); len += snprintf(buf + len, size - len, "%c", c); } len += snprintf(buf + len, size - len, "|\n"); off += 16; } n = _log_internal(buf, len); if (n < 0) { l->nerror++; } errno = errno_save; }