rust: Move the logger into a separate module

This commit is contained in:
Damir Jelić 2021-02-16 11:38:54 +01:00
parent 2d620e2ddf
commit 504e1e31bd
2 changed files with 55 additions and 52 deletions

View File

@ -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
View 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();
}