Skip to content

Commit

Permalink
Implemented LogMessages as json
Browse files Browse the repository at this point in the history
  • Loading branch information
danielsanchezq committed Aug 3, 2020
1 parent 756743a commit 60b6d08
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 19 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion vit-servicing-station-lib/Cargo.toml
Expand Up @@ -17,7 +17,7 @@ diesel = { version = "1.4.4", features = ["sqlite", "r2d2"] }
diesel_migrations = "1.4.0"
dotenv = "0.9.0"
itertools = "0.9.0"
log = "0.4.11"
log = { version = "0.4.11", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.53"
simplelog = "0.8.0"
Expand Down
53 changes: 36 additions & 17 deletions vit-servicing-station-lib/src/logging/messages.rs
@@ -1,37 +1,38 @@
use serde::export::Formatter;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub enum LogMessageId {
None,
Other(String),
}

#[derive(Serialize, Deserialize)]
pub struct LogMessage {
id: LogMessageId,
level: log::Level,
tags: Vec<String>,
message: String,
timestamp: i64,
}

pub struct LogMessageBuilder {
id: LogMessageId,
level: log::Level,
tags: Vec<String>,
message: Option<String>,
}

impl std::fmt::Display for LogMessageId {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let id = match self {
LogMessageId::None => "None",
LogMessageId::Other(id) => id,
};
write!(f, "{}", id)
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}

impl LogMessageBuilder {
pub fn new() -> Self {
Self {
id: LogMessageId::None,
level: log::Level::max(),
tags: vec![],
message: None,
}
Expand All @@ -40,6 +41,16 @@ impl LogMessageBuilder {
pub fn with_id(self, id: LogMessageId) -> Self {
Self {
id,
level: self.level,
tags: self.tags,
message: self.message,
}
}

pub fn with_level(self, level: log::Level) -> Self {
Self {
id: self.id,
level,
tags: self.tags,
message: self.message,
}
Expand All @@ -48,6 +59,7 @@ impl LogMessageBuilder {
pub fn with_tags(self, tags: Vec<String>) -> Self {
Self {
id: self.id,
level: self.level,
tags,
message: self.message,
}
Expand All @@ -56,6 +68,7 @@ impl LogMessageBuilder {
pub fn with_message(self, message: String) -> Self {
Self {
id: self.id,
level: self.level,
tags: self.tags,
message: Some(message),
}
Expand All @@ -64,32 +77,38 @@ impl LogMessageBuilder {
pub fn build(self) -> LogMessage {
LogMessage {
id: self.id,
level: self.level,
tags: self.tags,
message: self.message.unwrap_or(Default::default()),
message: self.message.unwrap_or_default(),
timestamp: chrono::Utc::now().timestamp(),
}
}
}

impl Default for LogMessageBuilder {
fn default() -> Self {
Self::new()
}
}

impl LogMessage {
pub fn new(id: LogMessageId, message: String, tags: Vec<String>) -> Self {
pub fn new(id: LogMessageId, level: log::Level, message: String, tags: Vec<String>) -> Self {
Self {
id,
level,
tags,
message,
timestamp: chrono::Utc::now().timestamp(),
}
}

pub fn log(&self) {
log::log!(self.level, "{}", serde_json::to_string(self).unwrap())
}
}

impl std::fmt::Display for LogMessage {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let tags = format!("[{}]", self.tags.join(":"));
let id = format!("[{}]", self.id);
write!(
f,
"{} - {} - {} - {}",
id, tags, self.timestamp, self.message
)
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
5 changes: 5 additions & 0 deletions vit-servicing-station-lib/src/logging/methods.rs
@@ -0,0 +1,5 @@
use crate::logging::LogMessage;

pub fn log(log_message: LogMessage) {
log_message.log()
}
4 changes: 4 additions & 0 deletions vit-servicing-station-lib/src/logging/mod.rs
@@ -1,2 +1,6 @@
pub mod config;
pub mod messages;
mod methods;

pub use messages::{LogMessage, LogMessageBuilder, LogMessageId};
pub use methods::log;
2 changes: 1 addition & 1 deletion vit-servicing-station-server/src/main.rs
Expand Up @@ -13,7 +13,7 @@ async fn main() {
if let Some(settings_file) = &settings.in_settings_file {
let in_file_settings = server_settings::load_settings_from_file(settings_file)
.unwrap_or_else(|e| {
println!("Error loading settings from file {}, {}", settings_file, e);
log::error!("Error loading settings from file {}, {}", settings_file, e);
std::process::exit(ApplicationExitCode::LoadSettingsError.into())
});
// merge input file settings override by cli arguments
Expand Down

0 comments on commit 60b6d08

Please sign in to comment.