[pve-devel] [PATCH proxmox] log: add perlmod logger
Gabriel Goller
g.goller at proxmox.com
Thu Dec 5 11:16:35 CET 2024
Add special logger for perlmod. This one will print everything to
stderr (which will end up in the tasklog) and the errors to journald.
Reported-by: Maximiliano Sandoval <m.sandoval at proxmox.com>
Reported-by: Lukas Wagner <l.wagner at proxmox.com>
Signed-off-by: Gabriel Goller <g.goller at proxmox.com>
---
proxmox-log/src/lib.rs | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/proxmox-log/src/lib.rs b/proxmox-log/src/lib.rs
index 8c74e42b618d..5713c094e981 100644
--- a/proxmox-log/src/lib.rs
+++ b/proxmox-log/src/lib.rs
@@ -191,3 +191,38 @@ pub fn init_cli_logger(
LogTracer::init_with_filter(log_level.as_log())?;
Ok(())
}
+
+/// Initialize logger for perlmod
+///
+/// This logger will log everything to stderr (which will land in the tasklog)
+/// and the errors to syslog as well.
+pub fn init_perlmod_logger(
+ env_var_name: &str,
+ default_log_level: LevelFilter,
+) -> Result<(), anyhow::Error> {
+ let mut log_level = default_log_level;
+ if let Ok(v) = env::var(env_var_name) {
+ match v.parse::<LevelFilter>() {
+ Ok(l) => {
+ log_level = l;
+ }
+ Err(e) => {
+ eprintln!("env variable {env_var_name} found, but parsing failed: {e:?}");
+ }
+ }
+ }
+
+ let registry = tracing_subscriber::registry()
+ .with(
+ tracing_journald::layer().ok()
+ .with_filter(filter_fn(|metadata| {
+ *metadata.level() == Level::ERROR
+ }))
+ .with_filter(log_level),
+ )
+ .with(plain_stderr_layer().with_filter(log_level));
+
+ tracing::subscriber::set_global_default(registry)?;
+ LogTracer::init_with_filter(log_level.as_log())?;
+ Ok(())
+}
--
2.39.5
More information about the pve-devel
mailing list