@@ -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
96115impl 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