@@ -50,6 +50,8 @@ fn startup_env_filter(level: Level) -> anyhow::Result<EnvFilter> {
50
50
Ok ( env_filter)
51
51
}
52
52
53
+ type ReloadLayer = tracing_subscriber:: reload:: Layer < EnvFilter , tracing_subscriber:: Registry > ;
54
+
53
55
pub fn setup_logging_and_tracing (
54
56
level : Level ,
55
57
ansi_colors : bool ,
@@ -63,9 +65,31 @@ pub fn setup_logging_and_tracing(
63
65
}
64
66
}
65
67
global:: set_text_map_propagator ( TraceContextPropagator :: new ( ) ) ;
66
- let ( reloadable_env_filter, reload_handle) =
67
- tracing_subscriber:: reload:: Layer :: new ( startup_env_filter ( level) ?) ;
68
+
69
+ let event_format = EventFormat :: get_from_env ( ) ;
70
+ let fmt_fields = event_format. format_fields ( ) ;
68
71
let registry = tracing_subscriber:: registry ( ) ;
72
+
73
+ let ( reloadable_env_filter, reload_handle) = ReloadLayer :: new ( startup_env_filter ( level) ?) ;
74
+
75
+ #[ cfg( not( feature = "jemalloc-profiled" ) ) ]
76
+ let registry = registry. with ( reloadable_env_filter) . with (
77
+ tracing_subscriber:: fmt:: layer ( )
78
+ . event_format ( event_format)
79
+ . fmt_fields ( fmt_fields)
80
+ . with_ansi ( ansi_colors) ,
81
+ ) ;
82
+
83
+ #[ cfg( feature = "jemalloc-profiled" ) ]
84
+ let registry = jemalloc_profiled:: configure_registry (
85
+ registry,
86
+ event_format,
87
+ fmt_fields,
88
+ ansi_colors,
89
+ level,
90
+ reloadable_env_filter,
91
+ ) ?;
92
+
69
93
// Note on disabling ANSI characters: setting the ansi boolean on event format is insufficient.
70
94
// It is thus set on layers, see https://github.com/tokio-rs/tracing/issues/1817
71
95
if get_bool_from_env ( QW_ENABLE_OPENTELEMETRY_OTLP_EXPORTER_ENV_KEY , false ) {
@@ -92,40 +116,11 @@ pub fn setup_logging_and_tracing(
92
116
. build ( ) ;
93
117
let tracer = provider. tracer ( "quickwit" ) ;
94
118
let telemetry_layer = tracing_opentelemetry:: layer ( ) . with_tracer ( tracer) ;
95
-
96
- let event_format = EventFormat :: get_from_env ( ) ;
97
- let fmt_fields = event_format. format_fields ( ) ;
98
-
99
119
registry
100
- . with ( reloadable_env_filter)
101
120
. with ( telemetry_layer)
102
- . with (
103
- tracing_subscriber:: fmt:: layer ( )
104
- . event_format ( event_format)
105
- . fmt_fields ( fmt_fields)
106
- . with_ansi ( ansi_colors) ,
107
- )
108
121
. try_init ( )
109
122
. context ( "failed to register tracing subscriber" ) ?;
110
123
} else {
111
- let event_format = EventFormat :: get_from_env ( ) ;
112
- let fmt_fields = event_format. format_fields ( ) ;
113
- #[ cfg( not( feature = "jemalloc-profiled" ) ) ]
114
- let registry = registry. with ( reloadable_env_filter) . with (
115
- tracing_subscriber:: fmt:: layer ( )
116
- . event_format ( event_format)
117
- . fmt_fields ( fmt_fields)
118
- . with_ansi ( ansi_colors) ,
119
- ) ;
120
- #[ cfg( feature = "jemalloc-profiled" ) ]
121
- let registry = jemalloc_profiled:: configure_registry (
122
- registry,
123
- event_format,
124
- fmt_fields,
125
- ansi_colors,
126
- level,
127
- ) ?;
128
-
129
124
registry
130
125
. try_init ( )
131
126
. context ( "failed to register tracing subscriber" ) ?;
@@ -232,10 +227,11 @@ pub(super) mod jemalloc_profiled {
232
227
use tracing_subscriber:: registry:: LookupSpan ;
233
228
234
229
use super :: { EventFormat , FieldFormat , startup_env_filter, time_formatter} ;
230
+ use crate :: logger:: ReloadLayer ;
235
231
236
232
/// An event formatter specific to the memory profiler output.
237
233
///
238
- /// Also displays a backtrace after spans and the fields of the tracing
234
+ /// Also displays a backtrace after the spans and fields of the tracing
239
235
/// event (into separate lines).
240
236
struct ProfilingFormat {
241
237
time_formatter : UtcTime < Vec < BorrowedFormatItem < ' static > > > ,
@@ -309,13 +305,15 @@ pub(super) mod jemalloc_profiled {
309
305
///
310
306
/// The the jemalloc profiler formatter disables the env filter reloading
311
307
/// because the [tracing_subscriber::reload::Layer] seems to overwrite the
312
- /// TRACE level span filter even though it's applied to a separate layer.
308
+ /// filter configured by [profiler_tracing_filter()] even though it is
309
+ /// applied to a separate layer.
313
310
pub ( super ) fn configure_registry < S > (
314
311
registry : S ,
315
312
event_format : EventFormat < ' static > ,
316
313
fmt_fields : FieldFormat ,
317
314
ansi_colors : bool ,
318
315
level : Level ,
316
+ _reloadable_env_filter : ReloadLayer ,
319
317
) -> anyhow:: Result < impl Subscriber + for <' span > LookupSpan < ' span > >
320
318
where
321
319
S : Subscriber + for < ' span > LookupSpan < ' span > ,
0 commit comments