@@ -144,6 +144,7 @@ pub(crate) struct Builder {
144144 pub format_level : bool ,
145145 pub format_indent : Option < usize > ,
146146 pub custom_format : Option < FormatFn > ,
147+ pub format_suffix : & ' static str ,
147148 built : bool ,
148149}
149150
@@ -155,6 +156,7 @@ impl Default for Builder {
155156 format_level : true ,
156157 format_indent : Some ( 4 ) ,
157158 custom_format : None ,
159+ format_suffix : "\n " ,
158160 built : false ,
159161 }
160162 }
@@ -187,6 +189,7 @@ impl Builder {
187189 level : built. format_level ,
188190 written_header_value : false ,
189191 indent : built. format_indent ,
192+ suffix : built. format_suffix ,
190193 buf,
191194 } ;
192195
@@ -211,6 +214,7 @@ struct DefaultFormat<'a> {
211214 written_header_value : bool ,
212215 indent : Option < usize > ,
213216 buf : & ' a mut Formatter ,
217+ suffix : & ' a str ,
214218}
215219
216220impl < ' a > DefaultFormat < ' a > {
@@ -319,7 +323,7 @@ impl<'a> DefaultFormat<'a> {
319323 fn write_args ( & mut self , record : & Record ) -> io:: Result < ( ) > {
320324 match self . indent {
321325 // Fast path for no indentation
322- None => writeln ! ( self . buf, "{}" , record. args( ) ) ,
326+ None => write ! ( self . buf, "{}{} " , record. args( ) , self . suffix ) ,
323327
324328 Some ( indent_count) => {
325329 // Create a wrapper around the buffer only if we have to actually indent the message
@@ -334,7 +338,13 @@ impl<'a> DefaultFormat<'a> {
334338 let mut first = true ;
335339 for chunk in buf. split ( |& x| x == b'\n' ) {
336340 if !first {
337- write ! ( self . fmt. buf, "\n {:width$}" , "" , width = self . indent_count) ?;
341+ write ! (
342+ self . fmt. buf,
343+ "{}{:width$}" ,
344+ self . fmt. suffix,
345+ "" ,
346+ width = self . indent_count
347+ ) ?;
338348 }
339349 self . fmt . buf . write_all ( chunk) ?;
340350 first = false ;
@@ -357,7 +367,7 @@ impl<'a> DefaultFormat<'a> {
357367 write ! ( wrapper, "{}" , record. args( ) ) ?;
358368 }
359369
360- writeln ! ( self . buf) ?;
370+ write ! ( self . buf, "{}" , self . suffix ) ?;
361371
362372 Ok ( ( ) )
363373 }
@@ -402,6 +412,7 @@ mod tests {
402412 level : true ,
403413 written_header_value : false ,
404414 indent : None ,
415+ suffix : "\n " ,
405416 buf : & mut f,
406417 } ) ;
407418
@@ -422,6 +433,7 @@ mod tests {
422433 level : false ,
423434 written_header_value : false ,
424435 indent : None ,
436+ suffix : "\n " ,
425437 buf : & mut f,
426438 } ) ;
427439
@@ -442,6 +454,7 @@ mod tests {
442454 level : true ,
443455 written_header_value : false ,
444456 indent : Some ( 4 ) ,
457+ suffix : "\n " ,
445458 buf : & mut f,
446459 } ) ;
447460
@@ -462,6 +475,7 @@ mod tests {
462475 level : true ,
463476 written_header_value : false ,
464477 indent : Some ( 0 ) ,
478+ suffix : "\n " ,
465479 buf : & mut f,
466480 } ) ;
467481
@@ -482,9 +496,52 @@ mod tests {
482496 level : false ,
483497 written_header_value : false ,
484498 indent : Some ( 4 ) ,
499+ suffix : "\n " ,
485500 buf : & mut f,
486501 } ) ;
487502
488503 assert_eq ! ( "log\n message\n " , written) ;
489504 }
505+
506+ #[ test]
507+ fn format_suffix ( ) {
508+ let writer = writer:: Builder :: new ( )
509+ . write_style ( WriteStyle :: Never )
510+ . build ( ) ;
511+
512+ let mut f = Formatter :: new ( & writer) ;
513+
514+ let written = write ( DefaultFormat {
515+ timestamp : None ,
516+ module_path : false ,
517+ level : false ,
518+ written_header_value : false ,
519+ indent : None ,
520+ suffix : "\n \n " ,
521+ buf : & mut f,
522+ } ) ;
523+
524+ assert_eq ! ( "log\n message\n \n " , written) ;
525+ }
526+
527+ #[ test]
528+ fn format_suffix_with_indent ( ) {
529+ let writer = writer:: Builder :: new ( )
530+ . write_style ( WriteStyle :: Never )
531+ . build ( ) ;
532+
533+ let mut f = Formatter :: new ( & writer) ;
534+
535+ let written = write ( DefaultFormat {
536+ timestamp : None ,
537+ module_path : false ,
538+ level : false ,
539+ written_header_value : false ,
540+ indent : Some ( 4 ) ,
541+ suffix : "\n \n " ,
542+ buf : & mut f,
543+ } ) ;
544+
545+ assert_eq ! ( "log\n \n message\n \n " , written) ;
546+ }
490547}
0 commit comments