47 lines
1.3 KiB
Rust
47 lines
1.3 KiB
Rust
use log::{Level, Metadata, Record};
|
|
use std::sync::{Arc, Mutex};
|
|
|
|
pub struct LogtailLogger {
|
|
ing: Arc<Mutex<logtail_poster::Ingress>>,
|
|
threshold: Level,
|
|
}
|
|
|
|
#[derive(serde::Serialize)]
|
|
struct LogData<'a> {
|
|
level: &'a str,
|
|
target: &'a str,
|
|
module_path: &'a str,
|
|
file: &'a str,
|
|
line: u32,
|
|
message: String,
|
|
}
|
|
|
|
impl log::Log for LogtailLogger {
|
|
fn enabled(&self, metadata: &Metadata) -> bool {
|
|
metadata.level() <= self.threshold
|
|
}
|
|
|
|
fn log(&self, record: &Record) {
|
|
if self.enabled(record.metadata()) {
|
|
let ld = LogData {
|
|
level: record.level().as_str(),
|
|
target: record.target(),
|
|
module_path: record.module_path().unwrap_or("???"),
|
|
file: record.file().unwrap_or("???"),
|
|
line: record.line().unwrap_or(0),
|
|
message: format!("{}", record.args()),
|
|
};
|
|
|
|
if let Ok(val) = serde_json::to_value(&ld) {
|
|
if let Ok(mut ing) = self.ing.lock() {
|
|
if let Err(why) = ing.send(val) {
|
|
eprintln!("logtail_facade::jog::LogtailLogger::log: can't send json value to buffer: {}", why);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
fn flush(&self) {}
|
|
}
|