From 8df034ed6b3a1a52bd268ed43e783c35b687408f Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Mon, 28 Jul 2025 20:56:05 -0400 Subject: Add LogForException APIs to pass stack trace information separate from the message --- rust/src/logger.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'rust/src') diff --git a/rust/src/logger.rs b/rust/src/logger.rs index 2735dd2f..ceba29ec 100644 --- a/rust/src/logger.rs +++ b/rust/src/logger.rs @@ -162,6 +162,10 @@ pub trait LogListener: 'static + Sync { fn log(&self, session: usize, level: Level, msg: &str, logger_name: &str, tid: usize); fn level(&self) -> Level; fn close(&self) {} + + fn log_with_stack_trace(&self, session: usize, level: Level, _stack_trace: &str, msg: &str, logger_name: &str, tid: usize) { + self.log(session, level, msg, logger_name, tid); + } } pub struct LogGuard { @@ -175,6 +179,7 @@ impl Drop for LogGuard { let mut bn_obj = BNLogListener { context: self.ctxt as *mut _, log: Some(cb_log::), + logWithStackTrace: Some(cb_log_with_stack_trace::), close: Some(cb_close::), getLogLevel: Some(cb_level::), }; @@ -195,6 +200,7 @@ pub fn register_listener(listener: L) -> LogGuard { let mut bn_obj = BNLogListener { context: raw as *mut _, log: Some(cb_log::), + logWithStackTrace: Some(cb_log_with_stack_trace::), close: Some(cb_close::), getLogLevel: Some(cb_level::), }; @@ -225,6 +231,26 @@ extern "C" fn cb_log( }) } +extern "C" fn cb_log_with_stack_trace( + ctxt: *mut c_void, + session: usize, + level: Level, + stack_trace: *const c_char, + msg: *const c_char, + logger_name: *const c_char, + tid: usize, +) where + L: LogListener, +{ + ffi_wrap!("LogListener::log_with_stack_trace", unsafe { + let listener = &*(ctxt as *const L); + let stack_trace_str = raw_to_string(stack_trace).unwrap(); + let msg_str = raw_to_string(msg).unwrap(); + let logger_name_str = raw_to_string(logger_name).unwrap(); + listener.log_with_stack_trace(session, level, &stack_trace_str, &msg_str, &logger_name_str, tid); + }) +} + extern "C" fn cb_close(ctxt: *mut c_void) where L: LogListener, -- cgit v1.3.1