@@ -18,7 +18,7 @@ mod commands;
18
18
use crate :: command_prelude:: * ;
19
19
20
20
fn main ( ) {
21
- setup_logger ( ) ;
21
+ let _guard = setup_logger ( ) ;
22
22
23
23
let mut config = cli:: LazyConfig :: new ( ) ;
24
24
@@ -35,16 +35,42 @@ fn main() {
35
35
}
36
36
}
37
37
38
- fn setup_logger ( ) {
39
- let env = tracing_subscriber:: EnvFilter :: from_env ( "CARGO_LOG" ) ;
38
+ fn setup_logger ( ) -> Option < tracing_chrome :: FlushGuard > {
39
+ use tracing_subscriber:: prelude :: * ;
40
40
41
- tracing_subscriber:: fmt ( )
41
+ let env = tracing_subscriber:: EnvFilter :: from_env ( "CARGO_LOG" ) ;
42
+ let fmt_layer = tracing_subscriber:: fmt:: layer ( )
42
43
. with_timer ( tracing_subscriber:: fmt:: time:: Uptime :: default ( ) )
43
44
. with_ansi ( std:: io:: IsTerminal :: is_terminal ( & std:: io:: stderr ( ) ) )
44
45
. with_writer ( std:: io:: stderr)
45
- . with_env_filter ( env)
46
- . init ( ) ;
46
+ . with_filter ( env) ;
47
+
48
+ let ( profile_layer, profile_guard) =
49
+ #[ allow ( clippy:: disallowed_methods) ]
50
+ if env_to_bool ( std:: env:: var_os ( "_CARGO_LOG_PROFILE" ) . as_deref ( ) ) {
51
+ let capture_args =
52
+ env_to_bool ( std:: env:: var_os ( "_CARGO_LOG_PROFILE_CAPTURE_ARGS" ) . as_deref ( ) ) ;
53
+ let ( layer, guard) = tracing_chrome:: ChromeLayerBuilder :: new ( )
54
+ . include_args ( capture_args)
55
+ . build ( ) ;
56
+ ( Some ( layer) , Some ( guard) )
57
+ } else {
58
+ ( None , None )
59
+ } ;
60
+
61
+ let registry = tracing_subscriber:: registry ( )
62
+ . with ( fmt_layer)
63
+ . with ( profile_layer) ;
64
+ registry. init ( ) ;
47
65
tracing:: trace!( start = humantime:: format_rfc3339( std:: time:: SystemTime :: now( ) ) . to_string( ) ) ;
66
+ profile_guard
67
+ }
68
+
69
+ fn env_to_bool ( os : Option < & OsStr > ) -> bool {
70
+ match os. and_then ( |os| os. to_str ( ) ) {
71
+ Some ( "1" ) | Some ( "true" ) => true ,
72
+ _ => false ,
73
+ }
48
74
}
49
75
50
76
/// Table for defining the aliases which come builtin in `Cargo`.
0 commit comments