From: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
To: pdm-devel@lists.proxmox.com
Cc: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
Subject: [RFC datacenter-manager/proxmox v2 0/4] log: allow finegrained control logging levels
Date: Wed, 23 Sep 2026 13:57:58 +0200 [thread overview]
Message-ID: <20260923115815.211083-1-t.ellmenreich@proxmox.com> (raw)
The core of this change is a simple reinterpretation of the logging environment
variables that we are already using. Instead of parsing them as a single level
filter [0], they will now be interpreted as env filters [1]. Since the latter
can still parse the former, this change is backwards compatible and will not
break with any logging environment variables that have been set.
Implementation
--------------
As Gabriel Goller proposed in this [2] Bugzilla enhancement, by using
EnvFilters [1], we can have more granular control over the logging happening in
the different Proxmox products. The first two commits do exactly this and can
thus be applied by themselves. The last three add tests as well as utilities to
better communicate log levels to use cases that don't directly integrate with
tracing.
proxmox 1/4:
A simple reordering of the logging layers. This had to be done since
EnvFilter is currently not clonable and can thus be applied only once.
Previously, the global filter was being applied unnecessarily often, on all
layers and then on the tracing_log layer as well.
proxmox 2/4:
Actual implementation of EnvFilters.
proxmox 3/4:
Introduction of tests for our EnvFilter, parser, and constructor. This was
initially created for me to better understand EnvFilters, but then evolved
into tests to ensure consistent functionality with our 'default_log_level'.
datacenter-manager 4/4:
Use proxmox_log::enabled! to check if DEBUG is enabled and use that to
determine the REST server debug mode.
Different Log Options
---------------------
Combining the different options of the EnvFilter as well as our own default
log level, we have the following cases for logging:
1. Env contains 'simple':
Meaning that the environment variable contains a simple 'info'... This
means that that level is taken as the expected one.
2. Env contains 'simple', and 'module':
Means that the env variable contains a simple log level as well as zero or
more module specific log levels. As expected the simple level is applied
as a default and then for the specified modules the defined levels apply.
3. Env only contains 'module':
If the env only contains a module (or multiple), that is interpreted by
tracing as disabling the default logging and only enabling logging for the
module/s
4. Env is empty:
No logs are printed at all, everything is hidden.
5. Env is not set:
This is the only time the default comes into play, by being set as the
default log level.
Open Questions
--------------
- I had the idea that instead of having all users of the proxmox-log crate
provide their own 'default_log_level' we could define that inside of the
proxmox-log crate. By doing so, we could have the default change between
DEBUG and INFO depending on if we are in a normal or release build.
- Initially, I found case 3. of the different logging cases quite confusing and
would have thought that our 'default_log_level' should apply as default in
that case. Unfortunately, when setting 'default_log_level' and then applying
the EnvFilter string, tracing applies the modules as expected, but then also
overrides the default as '', which means off.
Notes for the Maintainer
------------------------
For all tracing backed logging in Proxmox products to support EnvFilters,
only patches 1 and 2 have to be applied. The 3 Patch only contains tests
which I mostly used for understanding, but do still test our defaulting
behaviour.
Patch 4 is just something I noticed and fixed, but is not necessary to
fix the Bugzilla issue: [2]
Changelog
---------
- RFC v1 -> v2
* Removed patch 'v1 proxmox 4/5', which introduced a LoggerConfig returned
by the Logger::init function. Deemed it unnecessary since I replaced the
usage for it in patch 'v1 datacenter-manager 5/5' with a simple 'enabled!'
and the idea of using it in the solution for [3] was abandoned.
* Cleaned up this cover letter
[0]: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.LevelFilter.html
[1]: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html
[2]: https://bugzilla.proxmox.com/show_bug.cgi?id=6081
[3]: https://bugzilla.proxmox.com/show_bug.cgi?id=4646
proxmox:
Thomas Ellmenreich (3):
log: replace per layer filtering by one global filter
fix #6081: log: replace simple level filter with env filter
log: add tests to the logger
proxmox-log/Cargo.toml | 2 +-
proxmox-log/src/builder.rs | 374 +++++++++++++++++++++++---
proxmox-log/src/lib.rs | 16 --
proxmox-log/src/pve_task_formatter.rs | 2 +-
4 files changed, 337 insertions(+), 57 deletions(-)
proxmox-datacenter-manager:
Thomas Ellmenreich (1):
api: set REST server debug level based on actual log level
server/src/bin/proxmox-datacenter-api/main.rs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
Summary over all repositories:
5 files changed, 340 insertions(+), 59 deletions(-)
--
Generated by murpp 0.12.0
next reply other threads:[~2026-09-23 11:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-23 11:57 Thomas Ellmenreich [this message]
2026-09-23 11:57 ` [PATCH proxmox v2 1/4] log: replace per layer filtering by one global filter Thomas Ellmenreich
2026-09-23 11:58 ` [PATCH proxmox v2 2/4] fix #6081: log: replace simple level filter with env filter Thomas Ellmenreich
2026-09-23 11:58 ` [PATCH proxmox v2 3/4] log: add tests to the logger Thomas Ellmenreich
2026-09-23 11:58 ` [PATCH datacenter-manager v2 4/4] api: set REST server debug level based on actual log level Thomas Ellmenreich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260923115815.211083-1-t.ellmenreich@proxmox.com \
--to=t.ellmenreich@proxmox.com \
--cc=pdm-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.