mod.rs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. use log::LevelFilter;
  2. use tracing::subscriber::set_global_default;
  3. use tracing_bunyan_formatter::{BunyanFormattingLayer, JsonStorageLayer};
  4. use tracing_log::LogTracer;
  5. use tracing_subscriber::{layer::SubscriberExt, EnvFilter};
  6. pub struct Builder {
  7. name: String,
  8. env_filter: String,
  9. }
  10. impl Builder {
  11. pub fn new(name: &str) -> Self {
  12. Builder {
  13. name: name.to_owned(),
  14. env_filter: "Info".to_owned(),
  15. }
  16. }
  17. pub fn env_filter(mut self, env_filter: &str) -> Self {
  18. self.env_filter = env_filter.to_owned();
  19. self
  20. }
  21. pub fn build(self) -> std::result::Result<(), String> {
  22. let env_filter = EnvFilter::new(self.env_filter);
  23. let subscriber = tracing_subscriber::fmt()
  24. .with_target(true)
  25. .with_max_level(tracing::Level::DEBUG)
  26. .with_writer(std::io::stderr)
  27. .with_thread_ids(true)
  28. .compact()
  29. .finish()
  30. .with(env_filter);
  31. let formatting_layer = BunyanFormattingLayer::new(self.name, std::io::stdout);
  32. let _ = set_global_default(subscriber.with(JsonStorageLayer).with(formatting_layer))
  33. .map_err(|e| format!("{:?}", e))?;
  34. let _ = LogTracer::builder()
  35. .with_max_level(LevelFilter::Debug)
  36. .init()
  37. .map_err(|e| format!("{:?}", e))
  38. .unwrap();
  39. Ok(())
  40. }
  41. }