logging extend level set api to allow setting emission function
Signed-off-by: Andy Green <andy.green@linaro.org>
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index b0e7a6d..53e71e0 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -44,6 +44,8 @@
#endif
static int log_level = LLL_ERR | LLL_WARN;
+static void lwsl_emit_stderr(const char *line);
+static void (*lwsl_emit)(const char *line) = lwsl_emit_stderr;
static const char *log_level_names[] = {
"ERR",
"WARN",
@@ -3273,35 +3275,50 @@
return wsi->user_space;
}
+
+static void lwsl_emit_stderr(const char *line)
+{
+ fprintf(stderr, "%s", line);
+}
+
void _lws_log(int filter, const char *format, ...)
{
+ char buf[256];
va_list ap;
int n;
+ int pos = 0;
if (!(log_level & filter))
return;
for (n = 0; n < LLL_COUNT; n++)
if (filter == (1 << n)) {
- fprintf(stderr, "%s: ", log_level_names[n]);
+ pos = sprintf(buf, "%s: ", log_level_names[n]);
break;
}
va_start(ap, format);
- vfprintf(stderr, format, ap);
- va_end(ap);
+ vsnprintf(buf + pos, (sizeof buf) - pos, format, ap);
+ buf[(sizeof buf) - 1] = '\0';
+ va_end(ap);
+
+ lwsl_emit(buf);
}
/**
* lws_set_log_level() - Set the logging bitfield
* @level: OR together the LLL_ debug contexts you want output from
+ * @log_emit_function: NULL to leave it as it is, or a user-supplied
+ * function to perform log string emission instead of
+ * the default stderr one.
*
- *
- * defaults to err and warn contexts enabled
+ * log level defaults to "err" and "warn" contexts enabled only and
+ * emission on stderr.
*/
-void lws_set_log_level(int level)
+void lws_set_log_level(int level, void (*log_emit_function)(const char *line))
{
log_level = level;
+ if (log_emit_function)
+ lwsl_emit = log_emit_function;
}
-