mirror of
https://github.com/sadoyan/aralez.git
synced 2026-10-23 06:01:35 +08:00
added inventory for immutable core logging files
This commit is contained in:
+23
-6
@@ -1,13 +1,30 @@
|
||||
use crate::logging::core::StructuredSystemLog;
|
||||
use crate::logging::elasticsearch::ElasticSearch;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::LazyLock;
|
||||
|
||||
pub trait WriteLog {
|
||||
pub trait WriteLog: Send + Sync {
|
||||
fn writelog(&self, msg: &StructuredSystemLog);
|
||||
}
|
||||
|
||||
pub struct LogBackendPlugin {
|
||||
pub name: &'static str,
|
||||
pub factory: fn() -> Box<dyn WriteLog>,
|
||||
}
|
||||
|
||||
inventory::collect!(LogBackendPlugin);
|
||||
|
||||
static BACKENDS: LazyLock<HashMap<&'static str, Box<dyn WriteLog>>> = LazyLock::new(|| {
|
||||
let mut map = HashMap::new();
|
||||
for plugin in inventory::iter::<LogBackendPlugin> {
|
||||
map.insert(plugin.name, (plugin.factory)());
|
||||
}
|
||||
map
|
||||
});
|
||||
|
||||
pub fn sendlog(backend: &str, msg: &StructuredSystemLog) {
|
||||
match backend {
|
||||
"elasticsearch" => ElasticSearch.writelog(msg),
|
||||
"somewhereelse" => println!("somewhereelse"),
|
||||
_ => log::warn!("Unsupported logging mechanism : {}", backend),
|
||||
if let Some(logger) = BACKENDS.get(backend) {
|
||||
logger.writelog(msg);
|
||||
} else {
|
||||
log::warn!("Unsupported logging mechanism: {}", backend);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user