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 logger;
|
||||
mod machine;
|
||||
|
||||
pub use error::*;
|
||||
pub use logger::{set_logger, Logger};
|
||||
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"));
|
||||
|
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