From 6db7b8cbb515bf4b988db1d25e825feb2992c281 Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Tue, 8 Mar 2016 13:37:56 +0100 Subject: [PATCH] virlog: Introduce virLogSetOutputs This API is the entry point to output modification of the logger. Currently, everything is done by virLogParseAndDefineOutputs. Parsing and defining will be split into two operations both handled by this method transparently. Signed-off-by: Erik Skultety --- src/libvirt_private.syms | 1 + src/util/virlog.c | 31 +++++++++++++++++++++++++++++++ src/util/virlog.h | 1 + 3 files changed, 33 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3c352cfe7e..77fda3cab7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1899,6 +1899,7 @@ virLogProbablyLogMessage; virLogReset; virLogSetDefaultPriority; virLogSetFromEnv; +virLogSetOutputs; virLogUnlock; virLogVMessage; diff --git a/src/util/virlog.c b/src/util/virlog.c index 25b1fcb5d1..377a7c1c62 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -2149,3 +2149,34 @@ virLogParseFilters(const char *src, virLogFilterPtr **filters) virStringFreeList(strings); return ret; } + +/** + * virLogSetOutputs: + * @outputs: string defining a (set of) output(s) + * + * Replaces the current set of defined outputs with a new set of outputs. + * + * Returns 0 on success or -1 in case of an error. + */ +int +virLogSetOutputs(const char *src) +{ + int ret = -1; + int noutputs = 0; + virLogOutputPtr *outputs = NULL; + + if (virLogInitialize() < 0) + return -1; + + if ((noutputs = virLogParseOutputs(src, &outputs)) < 0) + goto cleanup; + + if (virLogDefineOutputs(outputs, noutputs) < 0) + goto cleanup; + + outputs = NULL; + ret = 0; + cleanup: + virLogOutputListFree(outputs, noutputs); + return ret; +} diff --git a/src/util/virlog.h b/src/util/virlog.h index 1f97238114..f3b8f8b63f 100644 --- a/src/util/virlog.h +++ b/src/util/virlog.h @@ -197,6 +197,7 @@ void virLogOutputFree(virLogOutputPtr output); void virLogOutputListFree(virLogOutputPtr *list, int count); void virLogFilterFree(virLogFilterPtr filter); void virLogFilterListFree(virLogFilterPtr *list, int count); +int virLogSetOutputs(const char *outputs) ATTRIBUTE_NONNULL(1); /* * Internal logging API