Here's my code:
use colored::*;
use tracing::error;
use tracing::event;
use tracing::level_filters::LevelFilter;
use tracing::Level;
use tracing::Subscriber;
use tracing_subscriber::fmt;
use tracing_subscriber::layer::Layer;
use tracing_subscriber::prelude::*;
use tracing_subscriber::EnvFilter;
fn main() {
tracing_configuration();
error!("table");
println!("tower");
}
pub fn tracing_configuration() {
tracing_subscriber::registry()
.with(fmt::layer().without_time())
.with(CustomLayer {})
.with(
EnvFilter::builder()
.with_default_directive(LevelFilter::INFO.into())
.from_env()
.unwrap_or(EnvFilter::from_default_env()),
)
.init();
}
#[derive(Clone, Debug, Default)]
pub struct CustomLayer {}
impl<S> Layer<S> for CustomLayer
where
S: Subscriber,
{
fn on_event(&self, event: &event::Event<'_>, ctx: tracing_subscriber::layer::Context<'_, S>) {
let metadata = event.metadata();
let file = metadata.file().unwrap();
let formatted_file = file.replace('/', "::").replace("src::", "");
let trimmed_file = formatted_file.trim_end_matches(".rs");
let line = metadata.line().unwrap().to_string();
let level = metadata.level();
if *level == Level::ERROR {
println!(
"{} {}{} {}{}",
"ERROR".red(),
trimmed_file.black(),
":".black(),
line.black(),
": ".black(),
);
}
dbg!(&event);
let callsite = event.fields().map(|field| field.callsite());
dbg!(&callsite);
let name = event.fields().map(|field| field.name());
dbg!(&name);
let metadata = event.metadata();
dbg!(&metadata);
let parent = event.parent();
dbg!(&parent);
panic!();
}
}
`event` contains the following:
[src/main.rs:57:9] &event = Event {
fields: ValueSet {
message: table,
callsite: Identifier(0x633812807010),
},
metadata: Metadata {
name: "event src/main.rs:14",
target: "nice",
level: Level(
Error,
),
module_path: "nice",
location: src/main.rs:14,
fields: {message},
callsite: Identifier(0x633812807010),
kind: Kind(EVENT),
},
parent: Current,
}
I'm trying to get the message
(in this case "table") from the event. I tried all the methods I could find on the Event
, but each of them seems to exclude the message I'm trying to get. How do I extract the message (in this case "table") into a variable?