59 lines
1.5 KiB
Rust
59 lines
1.5 KiB
Rust
use log::{Level, Log, Record};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Deserialize, Debug, Serialize)]
|
|
pub struct LogRecord<'a> {
|
|
pub level: usize,
|
|
pub module_path: Option<&'a str>,
|
|
pub file: Option<&'a str>,
|
|
pub line: Option<u32>,
|
|
pub message: String,
|
|
}
|
|
|
|
impl<'a> LogRecord<'a> {
|
|
pub fn new(record: &'a Record<'a>) -> Self {
|
|
Self {
|
|
level: serialize_level(record.level()),
|
|
module_path: record.module_path(),
|
|
file: record.file(),
|
|
line: record.line(),
|
|
message: record.args().to_string(),
|
|
}
|
|
}
|
|
|
|
pub fn log(&'a self, logger: &dyn Log) {
|
|
if let Some(level) = deserialize_level(self.level) {
|
|
logger.log(
|
|
&log::Record::builder()
|
|
.module_path(self.module_path)
|
|
.target("remote_server")
|
|
.args(format_args!("{}", self.message))
|
|
.file(self.file)
|
|
.line(self.line)
|
|
.level(level)
|
|
.build(),
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
fn serialize_level(level: Level) -> usize {
|
|
match level {
|
|
Level::Error => 1,
|
|
Level::Warn => 2,
|
|
Level::Info => 3,
|
|
Level::Debug => 4,
|
|
Level::Trace => 5,
|
|
}
|
|
}
|
|
|
|
fn deserialize_level(level: usize) -> Option<Level> {
|
|
match level {
|
|
1 => Some(Level::Error),
|
|
2 => Some(Level::Warn),
|
|
3 => Some(Level::Info),
|
|
4 => Some(Level::Debug),
|
|
5 => Some(Level::Trace),
|
|
_ => None,
|
|
}
|
|
}
|