Skip to content

Commit 98c3857

Browse files
committed
[Rust] Expose a non log specific function for sending logs to a Logger
This allows you to reference multiple different loggers without setting a global logger instance using `Logger::init`.
1 parent a882d6b commit 98c3857

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

rust/src/logger.rs

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,25 @@ impl Ref<Logger> {
9191
log::set_max_level(self.level);
9292
let _ = log::set_boxed_logger(Box::new(self));
9393
}
94+
95+
/// Send a log to the logger instance, if you instead want to use the `log` crate and its facilities,
96+
/// you should use [`Ref<Logger>::init`] to initialize the `log` compatible logger.
97+
pub fn send_log(&self, level: Level, msg: &str) {
98+
use binaryninjacore_sys::BNLog;
99+
if let Ok(msg) = CString::new(format!("{}", msg)) {
100+
let logger_name = self.name().to_cstr();
101+
unsafe {
102+
BNLog(
103+
self.session_id(),
104+
level,
105+
logger_name.as_ptr(),
106+
0,
107+
c"%s".as_ptr(),
108+
msg.as_ptr(),
109+
)
110+
}
111+
}
112+
}
94113
}
95114

96115
impl Default for Ref<Logger> {
@@ -127,29 +146,13 @@ impl log::Log for Ref<Logger> {
127146

128147
fn log(&self, record: &log::Record) {
129148
use self::Level::*;
130-
use binaryninjacore_sys::BNLog;
131-
use log::Level;
132-
133149
let level = match record.level() {
134-
Level::Error => ErrorLog,
135-
Level::Warn => WarningLog,
136-
Level::Info => InfoLog,
137-
Level::Debug | Level::Trace => DebugLog,
138-
};
139-
140-
if let Ok(msg) = CString::new(format!("{}", record.args())) {
141-
let logger_name = self.name().to_cstr();
142-
unsafe {
143-
BNLog(
144-
self.session_id(),
145-
level,
146-
logger_name.as_ptr(),
147-
0,
148-
c"%s".as_ptr(),
149-
msg.as_ptr(),
150-
);
151-
}
150+
log::Level::Error => ErrorLog,
151+
log::Level::Warn => WarningLog,
152+
log::Level::Info => InfoLog,
153+
log::Level::Debug | log::Level::Trace => DebugLog,
152154
};
155+
self.send_log(level, &format!("{}", record.args()));
153156
}
154157

155158
fn flush(&self) {}

0 commit comments

Comments
 (0)