@@ -410,6 +410,9 @@ pub struct Format<F = Full, T = SystemTime> {
410
410
pub ( crate ) display_timestamp : bool ,
411
411
pub ( crate ) display_target : bool ,
412
412
pub ( crate ) display_level : bool ,
413
+ pub ( crate ) display_binary_name : bool ,
414
+ pub ( crate ) binary_name : Option < String > ,
415
+ pub ( crate ) display_process_id : bool ,
413
416
pub ( crate ) display_thread_id : bool ,
414
417
pub ( crate ) display_thread_name : bool ,
415
418
pub ( crate ) display_filename : bool ,
@@ -588,6 +591,9 @@ impl Default for Format<Full, SystemTime> {
588
591
display_timestamp : true ,
589
592
display_target : true ,
590
593
display_level : true ,
594
+ display_binary_name : false ,
595
+ binary_name : None ,
596
+ display_process_id : false ,
591
597
display_thread_id : false ,
592
598
display_thread_name : false ,
593
599
display_filename : false ,
@@ -608,6 +614,9 @@ impl<F, T> Format<F, T> {
608
614
display_target : false ,
609
615
display_timestamp : self . display_timestamp ,
610
616
display_level : self . display_level ,
617
+ display_binary_name : self . display_binary_name ,
618
+ binary_name : self . binary_name ,
619
+ display_process_id : self . display_process_id ,
611
620
display_thread_id : self . display_thread_id ,
612
621
display_thread_name : self . display_thread_name ,
613
622
display_filename : self . display_filename ,
@@ -647,6 +656,9 @@ impl<F, T> Format<F, T> {
647
656
display_target : self . display_target ,
648
657
display_timestamp : self . display_timestamp ,
649
658
display_level : self . display_level ,
659
+ display_binary_name : self . display_binary_name ,
660
+ binary_name : self . binary_name ,
661
+ display_process_id : self . display_process_id ,
650
662
display_thread_id : self . display_thread_id ,
651
663
display_thread_name : self . display_thread_name ,
652
664
display_filename : true ,
@@ -679,6 +691,9 @@ impl<F, T> Format<F, T> {
679
691
display_target : self . display_target ,
680
692
display_timestamp : self . display_timestamp ,
681
693
display_level : self . display_level ,
694
+ display_binary_name : self . display_binary_name ,
695
+ binary_name : self . binary_name ,
696
+ display_process_id : self . display_process_id ,
682
697
display_thread_id : self . display_thread_id ,
683
698
display_thread_name : self . display_thread_name ,
684
699
display_filename : self . display_filename ,
@@ -708,6 +723,9 @@ impl<F, T> Format<F, T> {
708
723
display_target : self . display_target ,
709
724
display_timestamp : self . display_timestamp ,
710
725
display_level : self . display_level ,
726
+ display_binary_name : self . display_binary_name ,
727
+ binary_name : self . binary_name ,
728
+ display_process_id : self . display_process_id ,
711
729
display_thread_id : self . display_thread_id ,
712
730
display_thread_name : self . display_thread_name ,
713
731
display_filename : self . display_filename ,
@@ -724,6 +742,9 @@ impl<F, T> Format<F, T> {
724
742
display_timestamp : false ,
725
743
display_target : self . display_target ,
726
744
display_level : self . display_level ,
745
+ display_binary_name : self . display_binary_name ,
746
+ binary_name : self . binary_name ,
747
+ display_process_id : self . display_process_id ,
727
748
display_thread_id : self . display_thread_id ,
728
749
display_thread_name : self . display_thread_name ,
729
750
display_filename : self . display_filename ,
@@ -755,6 +776,33 @@ impl<F, T> Format<F, T> {
755
776
}
756
777
}
757
778
779
+ /// Sets whether or not the binary name of the process is displayed when
780
+ /// formatting events. If binary_name is None, argv\[0\] will be used,
781
+ /// otherwise the spcified string will be used.
782
+ ///
783
+ /// [argv\[0\]]: std::env::args
784
+ pub fn with_binary_name ( self ,
785
+ display_binary_name : bool ,
786
+ binary_name : Option < & str > ,
787
+ ) -> Format < F , T > {
788
+ Format {
789
+ display_binary_name,
790
+ binary_name : binary_name. map ( str:: to_string) ,
791
+ ..self
792
+ }
793
+ }
794
+
795
+ /// Sets whether or not the [process ID] of the current thread is displayed
796
+ /// when formatting events.
797
+ ///
798
+ /// [process ID]: std::process::id
799
+ pub fn with_process_id ( self , display_process_id : bool ) -> Format < F , T > {
800
+ Format {
801
+ display_process_id,
802
+ ..self
803
+ }
804
+ }
805
+
758
806
/// Sets whether or not the [thread ID] of the current thread is displayed
759
807
/// when formatting events.
760
808
///
@@ -938,6 +986,21 @@ where
938
986
}
939
987
940
988
self . format_timestamp ( & mut writer) ?;
989
+
990
+ if self . display_binary_name {
991
+ if let Some ( binary_name) = & self . binary_name {
992
+ write ! ( writer, "{} " , binary_name) ?;
993
+ } else if let Some ( argv0) = std:: env:: args ( ) . next ( ) {
994
+ write ! ( writer, "{} " , argv0) ?;
995
+ } else {
996
+ write ! ( writer, "<missing_argv[0] " ) ?;
997
+ }
998
+ }
999
+
1000
+ if self . display_process_id {
1001
+ write ! ( writer, "PID({}) " , std:: process:: id( ) ) ?;
1002
+ }
1003
+
941
1004
self . format_level ( * meta. level ( ) , & mut writer) ?;
942
1005
943
1006
if self . display_thread_name {
@@ -1662,6 +1725,8 @@ pub(super) mod test {
1662
1725
. without_time ( )
1663
1726
. with_level ( false )
1664
1727
. with_target ( false )
1728
+ . with_binary_name ( false , None )
1729
+ . with_process_id ( false )
1665
1730
. with_thread_ids ( false )
1666
1731
. with_thread_names ( false ) ;
1667
1732
#[ cfg( feature = "ansi" ) ]
@@ -1777,6 +1842,49 @@ pub(super) mod test {
1777
1842
assert_info_hello ( subscriber, make_writer, expected) ;
1778
1843
}
1779
1844
1845
+ #[ test]
1846
+ fn with_automatic_binary_name ( ) {
1847
+ let make_writer = MockMakeWriter :: default ( ) ;
1848
+ let subscriber = crate :: fmt:: Collector :: builder ( )
1849
+ . with_writer ( make_writer. clone ( ) )
1850
+ . with_binary_name ( true , None )
1851
+ . with_ansi ( false )
1852
+ . with_timer ( MockTime ) ;
1853
+ let expected =
1854
+ format ! ( "fake time {} INFO tracing_subscriber::fmt::format::test: hello\n " ,
1855
+ std:: env:: args( ) . next( ) . unwrap( ) ) ;
1856
+
1857
+ assert_info_hello ( subscriber, make_writer, & expected) ;
1858
+ }
1859
+
1860
+ #[ test]
1861
+ fn with_manual_binary_name ( ) {
1862
+ let make_writer = MockMakeWriter :: default ( ) ;
1863
+ let subscriber = crate :: fmt:: Collector :: builder ( )
1864
+ . with_writer ( make_writer. clone ( ) )
1865
+ . with_binary_name ( true , Some ( "a_nice_rust_binary" ) )
1866
+ . with_ansi ( false )
1867
+ . with_timer ( MockTime ) ;
1868
+ let expected =
1869
+ "fake time a_nice_rust_binary INFO tracing_subscriber::fmt::format::test: hello\n " ;
1870
+
1871
+ assert_info_hello ( subscriber, make_writer, expected) ;
1872
+ }
1873
+
1874
+ #[ test]
1875
+ fn with_process_id ( ) {
1876
+ let make_writer = MockMakeWriter :: default ( ) ;
1877
+ let subscriber = crate :: fmt:: Collector :: builder ( )
1878
+ . with_writer ( make_writer. clone ( ) )
1879
+ . with_process_id ( true )
1880
+ . with_ansi ( false )
1881
+ . with_timer ( MockTime ) ;
1882
+ let expected =
1883
+ "fake time PID(NUMERIC) INFO tracing_subscriber::fmt::format::test: hello\n " ;
1884
+
1885
+ assert_info_hello_ignore_numeric ( subscriber, make_writer, expected) ;
1886
+ }
1887
+
1780
1888
#[ test]
1781
1889
fn with_thread_ids ( ) {
1782
1890
let make_writer = MockMakeWriter :: default ( ) ;
0 commit comments