Radish alpha
h
rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
Radicle Heartwood Protocol & Stack
Radicle
Git
node: Log Panics
Merged did:key:z6MkgFq6...nBGz opened 9 months ago

It’s desired to log the backtrace in case of a panic. Add a custom panic handler which then logs the backtrace.

3 files changed +61 -1 0441b048 ed8b0860
modified Cargo.lock
@@ -3,6 +3,15 @@
version = 4

[[package]]
+
name = "addr2line"
+
version = "0.24.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
+
dependencies = [
+
 "gimli",
+
]
+

+
[[package]]
name = "adler2"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -198,6 +207,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"

[[package]]
+
name = "backtrace"
+
version = "0.3.75"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
+
dependencies = [
+
 "addr2line",
+
 "cfg-if",
+
 "libc",
+
 "miniz_oxide",
+
 "object",
+
 "rustc-demangle",
+
 "windows-targets 0.52.6",
+
]
+

+
[[package]]
name = "base-x"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -982,6 +1006,12 @@ dependencies = [
]

[[package]]
+
name = "gimli"
+
version = "0.31.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
+

+
[[package]]
name = "git-ref-format"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1957,6 +1987,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"

[[package]]
+
name = "log-panics"
+
version = "2.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f"
+
dependencies = [
+
 "backtrace",
+
 "log",
+
]
+

+
[[package]]
name = "maybe-async"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2179,6 +2219,15 @@ dependencies = [
]

[[package]]
+
name = "object"
+
version = "0.36.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
+
dependencies = [
+
 "memchr",
+
]
+

+
[[package]]
name = "once_cell"
version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2491,6 +2540,7 @@ dependencies = [
 "libc",
 "localtime",
 "log",
+
 "log-panics",
 "multibase",
 "nonempty 0.9.0",
 "pretty_assertions",
@@ -2936,6 +2986,12 @@ dependencies = [
]

[[package]]
+
name = "rustc-demangle"
+
version = "0.1.26"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
+

+
[[package]]
name = "rustix"
version = "0.38.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
modified crates/radicle/Cargo.toml
@@ -28,6 +28,7 @@ git2 = { workspace = true, features = ["vendored-libgit2"] }
indexmap = { version = "2", features = ["serde"] }
localtime = { workspace = true, features = ["serde"] }
log = { workspace = true, features = ["std"] }
+
log-panics = { version = "2", features = ["with-backtrace"] }
multibase = { workspace = true }
nonempty = { workspace = true, features = ["serialize"] }
qcheck = { workspace = true, optional = true }
modified crates/radicle/src/logger.rs
@@ -89,11 +89,14 @@ pub fn init(level: Level) -> Result<(), SetLoggerError> {
    set(Logger { level }, level)
}

-
/// Set a logger.
+
/// Set a logger and register panic handler that logs the backtrace via
+
/// the `log-panics` crate.
pub fn set(logger: impl Log + 'static, level: Level) -> Result<(), SetLoggerError> {
    log::set_boxed_logger(Box::new(logger))?;
    log::set_max_level(level.to_level_filter());

+
    log_panics::init();
+

    Ok(())
}