all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH proxmox] log: add perlmod logger
@ 2024-12-05 10:16 Gabriel Goller
  2024-12-05 10:16 ` [pve-devel] [PATCH proxmox-perl-rs] log: change default output to stderr and only log errors to journald Gabriel Goller
  0 siblings, 1 reply; 5+ messages in thread
From: Gabriel Goller @ 2024-12-05 10:16 UTC (permalink / raw)
  To: pve-devel; +Cc: Lukas Wagner

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@proxmox.com>
Reported-by: Lukas Wagner <l.wagner@proxmox.com>
Signed-off-by: Gabriel Goller <g.goller@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



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-12-05 10:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-12-05 10:16 [pve-devel] [PATCH proxmox] log: add perlmod logger Gabriel Goller
2024-12-05 10:16 ` [pve-devel] [PATCH proxmox-perl-rs] log: change default output to stderr and only log errors to journald Gabriel Goller
2024-12-05 10:18   ` Lukas Wagner
2024-12-05 10:20     ` Gabriel Goller
2024-12-05 10:21       ` Gabriel Goller

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.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal