From e0d854cd6b442f229bd565045693afab099c9d8c Mon Sep 17 00:00:00 2001 From: danwritecode Date: Thu, 27 Apr 2023 21:40:09 -0400 Subject: [PATCH] updated api to be cleaner --- Cargo.lock | 2 +- src/lib.rs | 25 +++++++++++++------------ src/providers/axiom.rs | 8 +++++--- src/providers/db.rs | 8 +++++--- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4434362..5461105 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -513,7 +513,7 @@ dependencies = [ [[package]] name = "log_anywhere" -version = "0.0.3" +version = "0.0.4" dependencies = [ "anyhow", "async-trait", diff --git a/src/lib.rs b/src/lib.rs index e781cba..430c7a5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,15 +3,13 @@ pub use crate::providers::prelude::*; use std::sync::{ Arc, Mutex }; use std::time::Duration; -use std::{ mem, panic, thread }; +use std::{ mem, panic }; use log::{Log, SetLoggerError}; use anyhow::Result; use serde::Serialize; use async_trait::async_trait; -use crossbeam::channel; -use tokio::runtime::Runtime; use tokio::task; use tokio::time::sleep; @@ -24,7 +22,7 @@ pub trait LogProvider: Send + Sync { #[derive(Clone)] -pub struct LogAnywhereLogger { +pub struct Logger { provider: Arc, log_buffer_records: Arc>>, buffer_timing: Arc, @@ -70,9 +68,10 @@ fn set_panic_hook ( ) { panic::set_hook(Box::new(move |p| { + *is_panicking.lock().unwrap() = true; + eprintln!("{}", p); eprintln!("waiting for log_anywhere to cleanup, 1 second please"); - *is_panicking.lock().unwrap() = true; let file = p.location().map(|l| l.file().to_string()); let line = p.location().map(|l| l.line()); @@ -91,7 +90,7 @@ fn set_panic_hook ( })); } -impl LogAnywhereLogger { +impl Logger { /// Initializes the global logger with a LogAnywhereLogger instance. /// /// ```no_run @@ -110,7 +109,7 @@ impl LogAnywhereLogger { buffer_timing: u64, level: log::LevelFilter ) -> Self { - LogAnywhereLogger { + Logger { provider, log_buffer_records: Arc::new(Mutex::new(Vec::new())), buffer_timing: Arc::new(buffer_timing), @@ -120,7 +119,7 @@ impl LogAnywhereLogger { } } - pub fn init(self: Box) -> Result<(), SetLoggerError> { + pub fn init(self: Self) -> Result<(), SetLoggerError> { let level_ptr = Arc::clone(&self.level); // set panic hook @@ -141,7 +140,9 @@ impl LogAnywhereLogger { ) ); - log::set_boxed_logger(self)?; + let boxed_self = Box::new(self); + + log::set_boxed_logger(boxed_self)?; log::set_max_level(*level_ptr); Ok(()) } @@ -155,10 +156,10 @@ pub struct LogAnywhereRecord { line: Option } -unsafe impl Sync for LogAnywhereLogger {} -unsafe impl Send for LogAnywhereLogger {} +unsafe impl Sync for Logger {} +unsafe impl Send for Logger {} -impl Log for LogAnywhereLogger { +impl Log for Logger { fn enabled(&self, metadata: &log::Metadata) -> bool { true } diff --git a/src/providers/axiom.rs b/src/providers/axiom.rs index a1ba666..2678fb9 100644 --- a/src/providers/axiom.rs +++ b/src/providers/axiom.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use reqwest::header::{AUTHORIZATION, CONTENT_TYPE}; use reqwest::header; use crate::{LogProvider, LogAnywhereRecord}; @@ -9,11 +11,11 @@ pub struct AxiomProvider { } impl AxiomProvider { - pub fn new(auth_token: String, dataset: String) -> AxiomProvider { - AxiomProvider { + pub fn new(auth_token: String, dataset: String) -> Arc { + Arc::new(AxiomProvider { auth_token, dataset - } + }) } } diff --git a/src/providers/db.rs b/src/providers/db.rs index b813d44..8989d03 100644 --- a/src/providers/db.rs +++ b/src/providers/db.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use async_trait::async_trait; use crate::{LogProvider, LogAnywhereRecord}; @@ -6,11 +8,11 @@ pub struct DbProvider { } impl DbProvider { - pub fn new() -> DbProvider { + pub fn new() -> Arc { let db_conn = "".to_string(); - DbProvider { + Arc::new(DbProvider { db_conn - } + }) } }