From c91286826f056c422e6f702c2f99baec2c8f92c3 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Wed, 19 Feb 2025 10:46:00 -0700 Subject: [PATCH] musikr: log panic messages JNI errors wont report it normally --- musikr/src/main/jni/Cargo.lock | 120 ++++++++++++++++++++++++++++----- musikr/src/main/jni/Cargo.toml | 3 + musikr/src/main/jni/src/lib.rs | 36 +++++++++- 3 files changed, 141 insertions(+), 18 deletions(-) diff --git a/musikr/src/main/jni/Cargo.lock b/musikr/src/main/jni/Cargo.lock index bfe68402c..5be8706e0 100644 --- a/musikr/src/main/jni/Cargo.lock +++ b/musikr/src/main/jni/Cargo.lock @@ -2,6 +2,33 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_logger" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f" +dependencies = [ + "android_log-sys", + "env_logger", + "log", + "once_cell", +] + [[package]] name = "anstyle" version = "1.0.10" @@ -22,9 +49,9 @@ checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "cc" -version = "1.2.12" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" dependencies = [ "shlex", ] @@ -43,18 +70,18 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.28" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" +checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" dependencies = [ "anstyle", "clap_lex", @@ -88,10 +115,20 @@ dependencies = [ ] [[package]] -name = "cxx" -version = "1.0.137" +name = "ctor" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc894913dccfed0f84106062c284fa021c3ba70cb1d78797d6f5165d4492e45" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "cxx" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc49567e08c72902f4cbc7242ee8d874ec9cbe97fbabf77b4e0e1f447513e13a" dependencies = [ "cc", "cxxbridge-cmd", @@ -103,9 +140,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503b2bfb6b3e8ce7f95d865a67419451832083d3186958290cee6c53e39dfcfe" +checksum = "fe46b5309c99e9775e7a338c98e4097455f52db5b684fd793ca22848fde6e371" dependencies = [ "cc", "codespan-reporting", @@ -117,9 +154,9 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d2cb64a95b4b5a381971482235c4db2e0208302a962acdbe314db03cbbe2fb" +checksum = "4315c4ce8d23c26d87f2f83698725fd5718d8e6ace4a9093da2664d23294d372" dependencies = [ "clap", "codespan-reporting", @@ -130,15 +167,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f797b0206463c9c2a68ed605ab28892cca784f1ef066050f4942e3de26ad885" +checksum = "f55d69deb3a92f610a60ecc524a72c7374b6dc822f8fb7bb4e5d9473f10530c4" [[package]] name = "cxxbridge-macro" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79010a2093848e65a3e0f7062d3f02fb2ef27f866416dfe436fccfa73d3bb59" +checksum = "5bee7a1d9b5091462002c2b8de2a4ed0f0fde011d503cc272633f66075bd5141" dependencies = [ "proc-macro2", "quote", @@ -146,6 +183,16 @@ dependencies = [ "syn", ] +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "log", + "regex", +] + [[package]] name = "foldhash" version = "0.1.4" @@ -199,12 +246,22 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" name = "metadatajni" version = "1.0.0" dependencies = [ + "android_logger", "bytemuck", + "ctor", "cxx", "cxx-build", "jni", + "link-cplusplus", + "log", ] +[[package]] +name = "once_cell" +version = "1.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" + [[package]] name = "proc-macro2" version = "1.0.93" @@ -223,6 +280,35 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + [[package]] name = "rustversion" version = "1.0.19" diff --git a/musikr/src/main/jni/Cargo.toml b/musikr/src/main/jni/Cargo.toml index 99695fe06..cdbd429ed 100644 --- a/musikr/src/main/jni/Cargo.toml +++ b/musikr/src/main/jni/Cargo.toml @@ -12,6 +12,9 @@ bytemuck = "1.21.0" cxx = "1.0.137" jni = "0.21.1" link-cplusplus = {version = "1.0.9", features = ["nothing"]} +android_logger = "0.13.3" +log = "0.4.20" +ctor = "0.2.6" [build-dependencies] cxx-build = "1.0.137" diff --git a/musikr/src/main/jni/src/lib.rs b/musikr/src/main/jni/src/lib.rs index c173ae399..b455bb4ac 100644 --- a/musikr/src/main/jni/src/lib.rs +++ b/musikr/src/main/jni/src/lib.rs @@ -1,7 +1,11 @@ +extern crate link_cplusplus; +use android_logger::Config; use jni::objects::{JClass, JObject}; use jni::sys::jobject; use jni::JNIEnv; +use log::LevelFilter; use std::cell::RefCell; +use std::panic; use std::rc::Rc; mod jbuilder; @@ -12,9 +16,39 @@ mod tagmap; use jbuilder::JMetadataBuilder; use jstream::JInputStream; use taglib::file_ref::FileRef; - +use android_logger::Filter; type SharedEnv<'local> = Rc>>; +// Initialize the logger and panic hook when the library is loaded +#[ctor::ctor] +fn init() { + // Initialize Android logger + android_logger::init_once( + Config::default() + .with_max_level(LevelFilter::Error) + .with_tag("musikr") + ); + + // Set custom panic hook + panic::set_hook(Box::new(|panic_info| { + let message = if let Some(s) = panic_info.payload().downcast_ref::() { + s.clone() + } else if let Some(s) = panic_info.payload().downcast_ref::<&str>() { + s.to_string() + } else { + "Unknown panic message".to_string() + }; + + let location = if let Some(location) = panic_info.location() { + format!("{}:{}:{}", location.file(), location.line(), location.column()) + } else { + "Unknown location".to_string() + }; + + log::error!(target: "musikr", "Panic occurred at {}: {}", location, message); + })); +} + #[no_mangle] pub extern "C" fn Java_org_oxycblt_musikr_metadata_MetadataJNI_openFile<'local>( env: JNIEnv<'local>,