pub mod builder;
pub mod error;
pub mod layer;
pub mod visitor;
pub use builder::SentryStrTracingBuilder;
pub use error::TracingError;
pub use layer::SentryStrLayer;
pub use visitor::FieldVisitor;
use sentrystr::{Event, Level};
use std::collections::BTreeMap;
use tracing::Metadata;
pub type Result<T> = std::result::Result<T, TracingError>;
pub fn convert_tracing_level(level: &tracing::Level) -> Level {
match *level {
tracing::Level::TRACE => Level::Debug,
tracing::Level::DEBUG => Level::Debug,
tracing::Level::INFO => Level::Info,
tracing::Level::WARN => Level::Warning,
tracing::Level::ERROR => Level::Error,
}
}
pub fn extract_event_metadata(metadata: &Metadata<'_>) -> BTreeMap<String, serde_json::Value> {
let mut fields = BTreeMap::new();
fields.insert(
"target".to_string(),
serde_json::Value::String(metadata.target().to_string()),
);
fields.insert(
"module_path".to_string(),
metadata
.module_path()
.map(|s| serde_json::Value::String(s.to_string()))
.unwrap_or(serde_json::Value::Null),
);
fields.insert(
"file".to_string(),
metadata
.file()
.map(|s| serde_json::Value::String(s.to_string()))
.unwrap_or(serde_json::Value::Null),
);
fields.insert(
"line".to_string(),
metadata
.line()
.map(|n| serde_json::Value::Number(n.into()))
.unwrap_or(serde_json::Value::Null),
);
fields.insert(
"level".to_string(),
serde_json::Value::String(metadata.level().to_string()),
);
fields
}
pub fn create_sentrystr_event(
message: String,
level: Level,
fields: BTreeMap<String, serde_json::Value>,
metadata_fields: BTreeMap<String, serde_json::Value>,
) -> Event {
let mut event = Event::new().with_message(message).with_level(level);
for (key, value) in fields {
event = event.with_extra(&key, value);
}
for (key, value) in metadata_fields {
event = event.with_extra(format!("meta_{}", key), value);
}
event
}