diff options
Diffstat (limited to 'rust/src/logger.rs')
| -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, |
