forked from Proxmox/proxmox
log: fallback to stderr if syslog not available
Don't panic when the syslog is not available - which happens commonly in containers and sbuild environments (chroot and unshare) - instead fallback to stderr. Signed-off-by: Gabriel Goller <g.goller@proxmox.com> Tested-by: Fiona Ebner <f.ebner@proxmox.com>
This commit is contained in:
parent
c6fd5604df
commit
c9c9ade96e
@ -50,8 +50,7 @@ pub fn init_logger(
|
|||||||
}
|
}
|
||||||
let registry = tracing_subscriber::registry()
|
let registry = tracing_subscriber::registry()
|
||||||
.with(
|
.with(
|
||||||
tracing_journald::layer()
|
journald_or_stderr_layer()
|
||||||
.expect("Unable to open syslog")
|
|
||||||
.with_filter(filter_fn(|metadata| {
|
.with_filter(filter_fn(|metadata| {
|
||||||
!LogContext::exists() || *metadata.level() >= Level::ERROR
|
!LogContext::exists() || *metadata.level() >= Level::ERROR
|
||||||
}))
|
}))
|
||||||
@ -127,6 +126,35 @@ impl LogContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn journald_or_stderr_layer<S>() -> Box<dyn tracing_subscriber::Layer<S> + Send + Sync>
|
||||||
|
where
|
||||||
|
S: tracing::Subscriber,
|
||||||
|
S: for<'a> tracing_subscriber::registry::LookupSpan<'a>,
|
||||||
|
{
|
||||||
|
match tracing_journald::layer() {
|
||||||
|
Ok(layer) => layer.boxed(),
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("Unable to open syslog: {err:?}");
|
||||||
|
plain_stderr_layer().boxed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn plain_stderr_layer<S>() -> impl tracing_subscriber::Layer<S>
|
||||||
|
where
|
||||||
|
S: tracing::Subscriber,
|
||||||
|
S: for<'a> tracing_subscriber::registry::LookupSpan<'a>,
|
||||||
|
{
|
||||||
|
let format = tracing_subscriber::fmt::format()
|
||||||
|
.with_level(false)
|
||||||
|
.without_time()
|
||||||
|
.with_target(false)
|
||||||
|
.compact();
|
||||||
|
tracing_subscriber::fmt::layer()
|
||||||
|
.event_format(format)
|
||||||
|
.with_writer(std::io::stderr)
|
||||||
|
}
|
||||||
|
|
||||||
/// Initialize default logger for CLI binaries
|
/// Initialize default logger for CLI binaries
|
||||||
pub fn init_cli_logger(
|
pub fn init_cli_logger(
|
||||||
env_var_name: &str,
|
env_var_name: &str,
|
||||||
@ -144,17 +172,9 @@ pub fn init_cli_logger(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let format = tracing_subscriber::fmt::format()
|
|
||||||
.with_level(false)
|
|
||||||
.without_time()
|
|
||||||
.with_target(false)
|
|
||||||
.compact();
|
|
||||||
|
|
||||||
let registry = tracing_subscriber::registry()
|
let registry = tracing_subscriber::registry()
|
||||||
.with(
|
.with(
|
||||||
tracing_subscriber::fmt::layer()
|
plain_stderr_layer()
|
||||||
.event_format(format)
|
|
||||||
.with_writer(std::io::stderr)
|
|
||||||
.with_filter(filter_fn(|metadata| {
|
.with_filter(filter_fn(|metadata| {
|
||||||
!LogContext::exists() || *metadata.level() >= Level::ERROR
|
!LogContext::exists() || *metadata.level() >= Level::ERROR
|
||||||
}))
|
}))
|
||||||
|
Loading…
Reference in New Issue
Block a user