use crate::level::Level;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LogRecord {
pub timestamp: DateTime<Utc>,
pub level: Level,
pub message: String,
pub module: Option<String>,
pub function: Option<String>,
pub filename: Option<String>,
pub lineno: Option<u32>,
pub fields: HashMap<String, serde_json::Value>,
}
impl LogRecord {
pub fn new(level: Level, message: String) -> Self {
Self {
timestamp: Utc::now(),
level,
message,
module: None,
function: None,
filename: None,
lineno: None,
fields: HashMap::new(),
}
}
pub fn with_field(mut self, key: String, value: serde_json::Value) -> Self {
self.fields.insert(key, value);
self
}
pub fn with_location(
mut self,
module: Option<String>,
function: Option<String>,
filename: Option<String>,
lineno: Option<u32>,
) -> Self {
self.module = module;
self.function = function;
self.filename = filename;
self.lineno = lineno;
self
}
}