1 use std
::sync
::{Arc, Mutex}
;
2 use tracing
::subscriber
::with_default
;
3 use tracing_core
::span
::{Attributes, Record}
;
4 use tracing_core
::{span, Event, Level, Metadata, Subscriber}
;
5 use tracing_log
::{LogTracer, NormalizeEvent}
;
8 last_normalized_metadata
: Mutex
<(bool
, Option
<OwnedMetadata
>)>,
11 #[derive(PartialEq, Debug)]
12 struct OwnedMetadata
{
16 module_path
: Option
<String
>,
21 struct TestSubscriber(Arc
<State
>);
23 impl Subscriber
for TestSubscriber
{
24 fn enabled(&self, meta
: &Metadata
<'_
>) -> bool
{
29 fn new_span(&self, _span
: &Attributes
<'_
>) -> span
::Id
{
30 span
::Id
::from_u64(42)
33 fn record(&self, _span
: &span
::Id
, _values
: &Record
<'_
>) {}
35 fn record_follows_from(&self, _span
: &span
::Id
, _follows
: &span
::Id
) {}
37 fn event(&self, event
: &Event
<'_
>) {
39 *self.0.last_normalized_metadata
.lock().unwrap() = (
41 event
.normalized_metadata().map(|normalized
| OwnedMetadata
{
42 name
: normalized
.name().to_string(),
43 target
: normalized
.target().to_string(),
44 level
: *normalized
.level(),
45 module_path
: normalized
.module_path().map(String
::from
),
46 file
: normalized
.file().map(String
::from
),
47 line
: normalized
.line(),
52 fn enter(&self, _span
: &span
::Id
) {}
54 fn exit(&self, _span
: &span
::Id
) {}
58 fn normalized_metadata() {
59 LogTracer
::init().unwrap();
60 let me
= Arc
::new(State
{
61 last_normalized_metadata
: Mutex
::new((false, None
)),
63 let state
= me
.clone();
65 with_default(TestSubscriber(me
), || {
66 let log
= log
::Record
::builder()
67 .args(format_args
!("Error!"))
68 .level(log
::Level
::Info
)
70 log
::logger().log(&log
);
75 name
: "log event".to_string(),
76 target
: "".to_string(),
84 let log
= log
::Record
::builder()
85 .args(format_args
!("Error!"))
86 .level(log
::Level
::Info
)
87 .target("log_tracer_target")
88 .file(Some("server.rs"))
90 .module_path(Some("log_tracer"))
92 log
::logger().log(&log
);
97 name
: "log event".to_string(),
98 target
: "log_tracer_target".to_string(),
100 module_path
: Some("log_tracer".to_string()),
101 file
: Some("server.rs".to_string()),
106 tracing
::info
!("test with a tracing info");
107 last(&state
, false, None
);
111 fn last(state
: &State
, should_be_log
: bool
, expected
: Option
<OwnedMetadata
>) {
112 let lock
= state
.last_normalized_metadata
.lock().unwrap();
113 let (is_log
, metadata
) = &*lock
;
115 assert_eq
!(dbg
!(*is_log
), should_be_log
);
116 assert_eq
!(metadata
.as_ref(), expected
.as_ref());