diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2025-07-28 20:56:05 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2025-08-01 14:35:04 -0400 |
| commit | 8df034ed6b3a1a52bd268ed43e783c35b687408f (patch) | |
| tree | caa89977dfffe302514489b96b6cda1765f0af2b /rust/src | |
| parent | 1b2f5c4c8df34d399a8abaff7db5d2338cb90ac1 (diff) | |
Add LogForException APIs to pass stack trace information separate from the message
Diffstat (limited to 'rust/src')
| -rw-r--r-- | rust/src/logger.rs | 26 |
1 files changed, 26 insertions, 0 deletions
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<L: LogListener> { @@ -175,6 +179,7 @@ impl<L: LogListener> Drop for LogGuard<L> { let mut bn_obj = BNLogListener { context: self.ctxt as *mut _, log: Some(cb_log::<L>), + logWithStackTrace: Some(cb_log_with_stack_trace::<L>), close: Some(cb_close::<L>), getLogLevel: Some(cb_level::<L>), }; @@ -195,6 +200,7 @@ pub fn register_listener<L: LogListener>(listener: L) -> LogGuard<L> { let mut bn_obj = BNLogListener { context: raw as *mut _, log: Some(cb_log::<L>), + logWithStackTrace: Some(cb_log_with_stack_trace::<L>), close: Some(cb_close::<L>), getLogLevel: Some(cb_level::<L>), }; @@ -225,6 +231,26 @@ extern "C" fn cb_log<L>( }) } +extern "C" fn cb_log_with_stack_trace<L>( + 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<L>(ctxt: *mut c_void) where L: LogListener, |
