85bdc064c80a7fe179f848e789dc62d1806f2d15
[ccan] / ccan / tdb2 / test / logging.c
1 #define _GNU_SOURCE
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <stdarg.h>
5 #include <ccan/tap/tap.h>
6 #include "logging.h"
7
8 unsigned tap_log_messages;
9 const char *log_prefix = "";
10 bool suppress_logging;
11
12 union tdb_attribute tap_log_attr = {
13         .log = { .base = { .attr = TDB_ATTRIBUTE_LOG },
14                  .log_fn = tap_log_fn }
15 };
16
17 void tap_log_fn(struct tdb_context *tdb,
18                 enum tdb_debug_level level, void *priv,
19                 const char *fmt, ...)
20 {
21         va_list ap;
22         char *p;
23
24         if (suppress_logging)
25                 return;
26
27         va_start(ap, fmt);
28         if (vasprintf(&p, fmt, ap) == -1)
29                 abort();
30         /* Strip trailing \n: diag adds it. */
31         if (p[strlen(p)-1] == '\n')
32                 p[strlen(p)-1] = '\0';
33         diag("tdb log level %u: %s%s", level, log_prefix, p);
34         free(p);
35         if (level != TDB_DEBUG_TRACE)
36                 tap_log_messages++;
37         va_end(ap);
38 }
39