diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 77fda3cab782fef87272716d56ade957a4398f04..342e78655db65c03335d01def3b28533af581d76 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1898,6 +1898,7 @@ virLogPriorityFromSyslog; virLogProbablyLogMessage; virLogReset; virLogSetDefaultPriority; +virLogSetFilters; virLogSetFromEnv; virLogSetOutputs; virLogUnlock; diff --git a/src/util/virlog.c b/src/util/virlog.c index 377a7c1c629419ae76e18a17a56f454f781d6ecb..0444155bba51b2dba669a2600d7c4ee350478fb8 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -2180,3 +2180,35 @@ virLogSetOutputs(const char *src) virLogOutputListFree(outputs, noutputs); return ret; } + + +/** + * virLogSetFilters: + * @src: string defining a (set of) filter(s) + * + * Replaces the current set of defined filters with a new set of filters. + * + * Returns 0 on success or -1 in case of an error. + */ +int +virLogSetFilters(const char *src) +{ + int ret = -1; + int nfilters = 0; + virLogFilterPtr *filters = NULL; + + if (virLogInitialize() < 0) + return -1; + + if (src && (nfilters = virLogParseFilters(src, &filters)) < 0) + goto cleanup; + + if (virLogDefineFilters(filters, nfilters) < 0) + goto cleanup; + + filters = NULL; + ret = 0; + cleanup: + virLogFilterListFree(filters, nfilters); + return ret; +} diff --git a/src/util/virlog.h b/src/util/virlog.h index f3b8f8b63f35bb1ceafa33c700017bea9b3522cd..58a392b2c0a030d289c16d43462bf0686631e481 100644 --- a/src/util/virlog.h +++ b/src/util/virlog.h @@ -198,6 +198,7 @@ void virLogOutputListFree(virLogOutputPtr *list, int count); void virLogFilterFree(virLogFilterPtr filter); void virLogFilterListFree(virLogFilterPtr *list, int count); int virLogSetOutputs(const char *outputs) ATTRIBUTE_NONNULL(1); +int virLogSetFilters(const char *filters); /* * Internal logging API