diff options
author | Lennart Poettering <lennart@poettering.net> | 2004-09-05 00:03:16 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2004-09-05 00:03:16 +0000 |
commit | 6c4fd620408b3f14a1d4164d58db70df7a252674 (patch) | |
tree | 3767a0fb76a3941267f9b6980075149dc31cb6bc /polyp/log.c | |
parent | 57e473b61cf373f8d9befb03d359b999eca4262b (diff) |
implement proper logging
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@179 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/log.c')
-rw-r--r-- | polyp/log.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/polyp/log.c b/polyp/log.c new file mode 100644 index 00000000..413266df --- /dev/null +++ b/polyp/log.c @@ -0,0 +1,48 @@ +#include <assert.h> +#include <stdarg.h> +#include <syslog.h> +#include <stdio.h> + +#include "log.h" +#include "xmalloc.h" +#include "util.h" + +static char *log_ident = NULL; +static enum pa_log_target log_target = PA_LOG_STDERR; +static void (*user_log_func)(const char *s) = NULL; + +void pa_log_set_ident(const char *p) { + if (log_ident) + pa_xfree(log_ident); + + log_ident = pa_xstrdup(p); +} + +void pa_log_set_target(enum pa_log_target t, void (*func)(const char*s)) { + assert(t == PA_LOG_USER || !func); + log_target = t; + user_log_func = func; +} + +void pa_log(const char *format, ...) { + va_list ap; + va_start(ap, format); + + switch (log_target) { + case PA_LOG_STDERR: + vfprintf(stderr, format, ap); + break; + case PA_LOG_SYSLOG: + openlog(log_ident ? log_ident : "???", LOG_PID, LOG_USER); + vsyslog(LOG_INFO, format, ap); + closelog(); + break; + case PA_LOG_USER: { + char *t = pa_vsprintf_malloc(format, ap); + assert(user_log_func); + user_log_func(t); + } + } + + va_end(ap); +} |