rust: Move the logger into a separate module
This commit is contained in:
parent
2d620e2ddf
commit
504e1e31bd
@ -1,59 +1,9 @@
|
|||||||
use std::sync::{Arc, Mutex};
|
|
||||||
|
|
||||||
use tracing_subscriber::{fmt::MakeWriter, EnvFilter};
|
|
||||||
|
|
||||||
mod error;
|
mod error;
|
||||||
|
mod logger;
|
||||||
mod machine;
|
mod machine;
|
||||||
|
|
||||||
pub use error::*;
|
pub use error::*;
|
||||||
|
pub use logger::{set_logger, Logger};
|
||||||
pub use machine::{Device, DeviceLists, OlmMachine, Request, RequestType, Sas};
|
pub use machine::{Device, DeviceLists, OlmMachine, Request, RequestType, Sas};
|
||||||
|
|
||||||
pub trait Logger: Send {
|
|
||||||
fn log(&self, log_line: String);
|
|
||||||
}
|
|
||||||
|
|
||||||
impl std::io::Write for LoggerWrapper {
|
|
||||||
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
|
|
||||||
let data = String::from_utf8_lossy(buf).to_string();
|
|
||||||
self.inner.lock().unwrap().log(data);
|
|
||||||
|
|
||||||
Ok(buf.len())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn flush(&mut self) -> std::io::Result<()> {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MakeWriter for LoggerWrapper {
|
|
||||||
type Writer = LoggerWrapper;
|
|
||||||
|
|
||||||
fn make_writer(&self) -> Self::Writer {
|
|
||||||
self.clone()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct LoggerWrapper {
|
|
||||||
inner: Arc<Mutex<Box<dyn Logger>>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_logger(logger: Box<dyn Logger>) {
|
|
||||||
let logger = LoggerWrapper {
|
|
||||||
inner: Arc::new(Mutex::new(logger)),
|
|
||||||
};
|
|
||||||
|
|
||||||
let filter = EnvFilter::from_default_env().add_directive(
|
|
||||||
"matrix_sdk_crypto=trace"
|
|
||||||
.parse()
|
|
||||||
.expect("Can't parse logging filter directive"),
|
|
||||||
);
|
|
||||||
|
|
||||||
let _ = tracing_subscriber::fmt()
|
|
||||||
.with_writer(logger)
|
|
||||||
.with_env_filter(filter)
|
|
||||||
.without_time()
|
|
||||||
.try_init();
|
|
||||||
}
|
|
||||||
|
|
||||||
include!(concat!(env!("OUT_DIR"), "/olm.uniffi.rs"));
|
include!(concat!(env!("OUT_DIR"), "/olm.uniffi.rs"));
|
||||||
|
53
rust-sdk/src/logger.rs
Normal file
53
rust-sdk/src/logger.rs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
use std::{
|
||||||
|
io::{Result, Write},
|
||||||
|
sync::{Arc, Mutex},
|
||||||
|
};
|
||||||
|
use tracing_subscriber::{fmt::MakeWriter, EnvFilter};
|
||||||
|
|
||||||
|
pub trait Logger: Send {
|
||||||
|
fn log(&self, log_line: String);
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Write for LoggerWrapper {
|
||||||
|
fn write(&mut self, buf: &[u8]) -> Result<usize> {
|
||||||
|
let data = String::from_utf8_lossy(buf).to_string();
|
||||||
|
self.inner.lock().unwrap().log(data);
|
||||||
|
|
||||||
|
Ok(buf.len())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn flush(&mut self) -> Result<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MakeWriter for LoggerWrapper {
|
||||||
|
type Writer = LoggerWrapper;
|
||||||
|
|
||||||
|
fn make_writer(&self) -> Self::Writer {
|
||||||
|
self.clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct LoggerWrapper {
|
||||||
|
inner: Arc<Mutex<Box<dyn Logger>>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_logger(logger: Box<dyn Logger>) {
|
||||||
|
let logger = LoggerWrapper {
|
||||||
|
inner: Arc::new(Mutex::new(logger)),
|
||||||
|
};
|
||||||
|
|
||||||
|
let filter = EnvFilter::from_default_env().add_directive(
|
||||||
|
"matrix_sdk_crypto=trace"
|
||||||
|
.parse()
|
||||||
|
.expect("Can't parse logging filter directive"),
|
||||||
|
);
|
||||||
|
|
||||||
|
let _ = tracing_subscriber::fmt()
|
||||||
|
.with_writer(logger)
|
||||||
|
.with_env_filter(filter)
|
||||||
|
.without_time()
|
||||||
|
.try_init();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user