@@ -115,13 +115,21 @@ impl GlibLogger {
115115 }
116116
117117 #[ doc( alias = "g_log" ) ]
118- fn write_log ( domain : Option < & str > , level : rs_log:: Level , message : & str ) {
118+ fn write_log ( domain : Option < & str > , level : rs_log:: Level , message : & std :: fmt :: Arguments < ' _ > ) {
119119 unsafe {
120+ use std:: fmt:: Write ;
121+
122+ let mut message_builder = crate :: GStringBuilder :: default ( ) ;
123+ if write ! ( & mut message_builder, "{}" , message) . is_err ( ) {
124+ return ;
125+ }
126+ let message = message_builder. into_string ( ) ;
127+
120128 crate :: ffi:: g_log (
121129 domain. to_glib_none ( ) . 0 ,
122130 GlibLogger :: level_to_glib ( level) . into_glib ( ) ,
123131 b"%s\0 " . as_ptr ( ) as * const _ ,
124- ToGlibPtr :: < * const std:: os:: raw:: c_char > :: to_glib_none ( message) . 0 ,
132+ ToGlibPtr :: < * const std:: os:: raw:: c_char > :: to_glib_none ( & message) . 0 ,
125133 ) ;
126134 }
127135 }
@@ -168,30 +176,26 @@ impl rs_log::Log for GlibLogger {
168176
169177 match self . format {
170178 GlibLoggerFormat :: Plain => {
171- let args = record. args ( ) ;
172- if let Some ( s) = args. as_str ( ) {
173- GlibLogger :: write_log ( domain, record. level ( ) , s) ;
174- } else {
175- GlibLogger :: write_log ( domain, record. level ( ) , & args. to_string ( ) ) ;
176- }
179+ GlibLogger :: write_log ( domain, record. level ( ) , record. args ( ) ) ;
177180 }
178181 GlibLoggerFormat :: LineAndFile => {
179182 match ( record. file ( ) , record. line ( ) ) {
180183 ( Some ( file) , Some ( line) ) => {
181- let s = format ! ( "{}:{}: {}" , file, line, record. args( ) ) ;
182- GlibLogger :: write_log ( domain, record. level ( ) , & s) ;
184+ GlibLogger :: write_log (
185+ domain,
186+ record. level ( ) ,
187+ & format_args ! ( "{}:{}: {}" , file, line, record. args( ) ) ,
188+ ) ;
183189 }
184190 ( Some ( file) , None ) => {
185- let s = format ! ( "{}: {}" , file, record. args( ) ) ;
186- GlibLogger :: write_log ( domain, record. level ( ) , & s) ;
191+ GlibLogger :: write_log (
192+ domain,
193+ record. level ( ) ,
194+ & format_args ! ( "{}: {}" , file, record. args( ) ) ,
195+ ) ;
187196 }
188197 _ => {
189- let args = record. args ( ) ;
190- if let Some ( s) = args. as_str ( ) {
191- GlibLogger :: write_log ( domain, record. level ( ) , s) ;
192- } else {
193- GlibLogger :: write_log ( domain, record. level ( ) , & args. to_string ( ) ) ;
194- }
198+ GlibLogger :: write_log ( domain, record. level ( ) , record. args ( ) ) ;
195199 }
196200 } ;
197201 }
0 commit comments