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