From nobody Wed May 14 17:33:10 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1522745167554289.4741415825773; Tue, 3 Apr 2018 01:46:07 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 408E64902F; Tue, 3 Apr 2018 08:46:06 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 17E0A17B3E; Tue, 3 Apr 2018 08:46:06 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CDB034CAA2; Tue, 3 Apr 2018 08:46:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w338jwne012074 for ; Tue, 3 Apr 2018 04:45:58 -0400 Received: by smtp.corp.redhat.com (Postfix) id 929547C45; Tue, 3 Apr 2018 08:45:58 +0000 (UTC) Received: from beluga.usersys.redhat.com (unknown [10.43.2.166]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1B9A77C49; Tue, 3 Apr 2018 08:45:57 +0000 (UTC) From: Erik Skultety To: libvir-list@redhat.com Date: Tue, 3 Apr 2018 10:45:48 +0200 Message-Id: <0480ba9343494faef036966349b001b81bb84422.1522744686.git.eskultet@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Cc: Erik Skultety Subject: [libvirt] [PATCH 3/4] util: virlog: Introduce wildcard to log filters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 03 Apr 2018 08:46:06 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Since the introduction of log tuning capabilities to virt-admin by @06b91785, this has been a much needed missing improvement on the way to deprecate the global 'log_level'. Signed-off-by: Erik Skultety --- src/remote/libvirtd.conf | 4 +++- src/util/virlog.c | 44 +++++++++++++++++++++++++++++++++++++++++++- src/util/virlog.h | 1 + 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/remote/libvirtd.conf b/src/remote/libvirtd.conf index 9c0080dc0..7d823cf1a 100644 --- a/src/remote/libvirtd.conf +++ b/src/remote/libvirtd.conf @@ -368,7 +368,9 @@ # Multiple filters can be defined in a single @filters, they just need to = be # separated by spaces. Note that libvirt performs "first" match, i.e. if # there are concurrent filters, the first one that matches will be applied, -# given the order in log_filters. +# given the order in log_filters with the exception of a wildcard filter, = since +# that's only taken into account if no other filter has matched, so +# "4:* 1:util.pci" and "1:util.pci 4:*" are equivalent definitions. # # e.g. to only get warning or errors from the remote layer and only errors # from the event layer: diff --git a/src/util/virlog.c b/src/util/virlog.c index 5810643e1..81a9dc439 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -497,6 +497,38 @@ virLogHostnameString(char **rawmsg, return 0; } =20 +/* virLogFiltersFind: + * @filters: haystack + * @nfilters: haystack size + * @key1: primary string 'needle' + * @key2: secondary integer 'needle' + * + * Performs "first match" search on the input set of filters, using @key1 + * (string) and @key2 (integer) as primary and secondary keys respectivel= y. + * Secondary key is only considered if primary key wasn't provided. + * + * Returns a pointer to the matched object or NULL if no match was found. + */ +static virLogFilterPtr +virLogFiltersFind(virLogFilterPtr *filters, + size_t nfilters, + const char *key1, + unsigned int key2) +{ + size_t i; + + if (!key1 && key2 =3D=3D 0) + return NULL; + + for (i =3D 0; i < nfilters; i++) { + if ((key1 && STREQ(key1, filters[i]->match)) || + filters[i]->flags =3D=3D key2) + return filters[i]; + } + + return NULL; +} + =20 static void virLogSourceUpdate(virLogSourcePtr source) @@ -1409,7 +1441,8 @@ virLogFilterNew(const char *match, virLogFilterPtr ret =3D NULL; char *mdup =3D NULL; =20 - virCheckFlags(VIR_LOG_STACK_TRACE, NULL); + virCheckFlags(VIR_LOG_STACK_TRACE | + VIR_LOG_WILDCARD, NULL); =20 if (priority < VIR_LOG_DEBUG || priority > VIR_LOG_ERROR) { virReportError(VIR_ERR_INVALID_ARG, _("Invalid log priority %d"), @@ -1528,6 +1561,8 @@ virLogDefineOutputs(virLogOutputPtr *outputs, size_t = noutputs) int virLogDefineFilters(virLogFilterPtr *filters, size_t nfilters) { + virLogFilterPtr rc; + if (virLogInitialize() < 0) return -1; =20 @@ -1535,6 +1570,10 @@ virLogDefineFilters(virLogFilterPtr *filters, size_t= nfilters) virLogResetFilters(); virLogFilters =3D filters; virLogNbFilters =3D nfilters; + + /* if there's a wildcard filter, update default priority */ + if ((rc =3D virLogFiltersFind(filters, nfilters, NULL, VIR_LOG_WILDCAR= D))) + virLogDefaultPriority =3D rc->priority; virLogUnlock(); =20 return 0; @@ -1710,6 +1749,9 @@ virLogParseFilter(const char *src) match++; } =20 + if (STREQ(match, "*")) + flags |=3D VIR_LOG_WILDCARD; + /* match string cannot comprise just from a single '+' */ if (!*match) { virReportError(VIR_ERR_INVALID_ARG, diff --git a/src/util/virlog.h b/src/util/virlog.h index 8973f83b2..07b91f0b0 100644 --- a/src/util/virlog.h +++ b/src/util/virlog.h @@ -174,6 +174,7 @@ typedef void (*virLogCloseFunc) (void *data); =20 typedef enum { VIR_LOG_STACK_TRACE =3D (1 << 0), + VIR_LOG_WILDCARD =3D (1 << 1) } virLogFlags; =20 int virLogGetNbFilters(void); --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list