mirror of
https://github.com/sadoyan/aralez.git
synced 2026-10-23 14:11:35 +08:00
added inventory for immutable core logging files
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
use crate::logging::core::StructuredSystemLog;
|
||||
use crate::logging::types::WriteLog;
|
||||
use crate::logging::types::{LogBackendPlugin, WriteLog};
|
||||
use std::env;
|
||||
use std::sync::LazyLock;
|
||||
|
||||
@@ -28,7 +28,15 @@ pub struct ElasticSearch;
|
||||
impl WriteLog for ElasticSearch {
|
||||
fn writelog(&self, msg: &StructuredSystemLog) {
|
||||
if let Ok(jsonmsg) = serde_json::to_string(&msg) {
|
||||
println!("Connecting to {} - {}:{} => {}", ELASTIC.hosts, ELASTIC.user, ELASTIC.password, jsonmsg);
|
||||
// ElasticSearch logic is not yet implemented.
|
||||
println!("{} - {}:{} => {}", ELASTIC.hosts, ELASTIC.user, ELASTIC.password, jsonmsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inventory::submit! {
|
||||
LogBackendPlugin {
|
||||
name: "elasticsearch",
|
||||
factory: || Box::new(ElasticSearch),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
use crate::logging::core::StructuredSystemLog;
|
||||
use crate::logging::types::{LogBackendPlugin, WriteLog};
|
||||
|
||||
pub struct Example;
|
||||
|
||||
impl WriteLog for Example {
|
||||
fn writelog(&self, msg: &StructuredSystemLog) {
|
||||
// Here comes the backend logic
|
||||
println!("Sending log Example : {:?}", msg);
|
||||
}
|
||||
}
|
||||
|
||||
// Mandatory with name: matching value of "log_structired" in main.yaml
|
||||
inventory::submit! {
|
||||
LogBackendPlugin {
|
||||
name: "example",
|
||||
factory: || Box::new(Example),
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod core;
|
||||
pub mod elasticsearch;
|
||||
pub mod example;
|
||||
pub mod types;
|
||||
|
||||
+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