1
- use crate :: utils:: otlp:: { OtelConfig , OtelGuard } ;
2
- use tracing_subscriber:: { layer:: SubscriberExt , util:: SubscriberInitExt , Layer } ;
1
+ use crate :: utils:: {
2
+ from_env:: FromEnvVar ,
3
+ otlp:: { OtelConfig , OtelGuard } ,
4
+ } ;
5
+ use tracing_subscriber:: { filter:: EnvFilter , layer:: SubscriberExt , util:: SubscriberInitExt , Layer } ;
6
+
7
+ const TRACING_LOG_JSON : & str = "TRACING_LOG_JSON" ;
8
+
9
+ /// Install a format layer based on the `TRACING_LOG_JSON` environment
10
+ /// variable, and then install the registr
11
+ ///
12
+ macro_rules! install_fmt {
13
+ ( json @ $registry: ident, $filter: ident) => { {
14
+ let fmt = tracing_subscriber:: fmt:: layer( ) . json( ) . with_filter( $filter) ;
15
+ $registry. with( fmt) . init( ) ;
16
+ } } ;
17
+ ( log @ $registry: ident, $filter: ident) => { {
18
+ let fmt = tracing_subscriber:: fmt:: layer( ) . with_filter( $filter) ;
19
+ $registry. with( fmt) . init( ) ;
20
+ } } ;
21
+ ( $registry: ident) => { {
22
+ let json = bool :: from_env_var( TRACING_LOG_JSON ) . unwrap_or( false ) ;
23
+ let filter = EnvFilter :: from_default_env( ) ;
24
+ if json {
25
+ install_fmt!( json @ $registry, filter) ;
26
+ } else {
27
+ install_fmt!( log @ $registry, filter) ;
28
+ }
29
+ } } ;
30
+ }
3
31
4
32
/// Init tracing, returning an optional guard for the OTEL provider.
5
33
///
@@ -8,25 +36,26 @@ use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, Layer};
8
36
/// environment variables are set, it will initialize the OTEL provider
9
37
/// with the specified configuration, as well as the `fmt` layer.
10
38
///
11
- /// See [`OtelConfig`] documentation for env var information.
39
+ /// ## Env Reads
40
+ ///
41
+ /// - `TRACING_LOG_JSON` - If set, will enable JSON logging.
42
+ /// - As [`OtelConfig`] documentation for env var information.
12
43
///
13
44
/// ## Panics
14
45
///
15
46
/// This function will panic if a global subscriber has already been set.
16
47
///
17
48
/// [`OtelConfig`]: crate::utils::otlp::OtelConfig
18
49
pub fn init_tracing ( ) -> Option < OtelGuard > {
19
- let registry = tracing_subscriber:: registry ( ) . with (
20
- tracing_subscriber:: fmt:: layer ( )
21
- . with_filter ( tracing_subscriber:: filter:: EnvFilter :: from_default_env ( ) ) ,
22
- ) ;
50
+ let registry = tracing_subscriber:: registry ( ) ;
23
51
24
52
if let Some ( cfg) = OtelConfig :: load ( ) {
25
53
let guard = cfg. provider ( ) ;
26
- registry. with ( guard. layer ( ) ) . init ( ) ;
54
+ let registry = registry. with ( guard. layer ( ) ) ;
55
+ install_fmt ! ( registry) ;
27
56
Some ( guard)
28
57
} else {
29
- registry . init ( ) ;
58
+ install_fmt ! ( registry ) ;
30
59
None
31
60
}
32
61
}
0 commit comments