summaryrefslogtreecommitdiff
path: root/src/systems/debug
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems/debug')
-rw-r--r--src/systems/debug/verbose_logger.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/systems/debug/verbose_logger.rs b/src/systems/debug/verbose_logger.rs
new file mode 100644
index 0000000..ceb8bd8
--- /dev/null
+++ b/src/systems/debug/verbose_logger.rs
@@ -0,0 +1,43 @@
+use chrono::Local;
+use env_logger::Builder;
+use log::Level;
+use rust_i18n::t;
+use std::io::Write;
+
+rust_i18n::i18n!("resources/locales/jvn", fallback = "en");
+
+pub fn init_verbose_logger(level_filter: Option<log::LevelFilter>) {
+ let mut builder = match level_filter {
+ Some(f) => {
+ let mut b = Builder::new();
+ b.filter_level(f);
+ b
+ }
+ None => return,
+ };
+
+ builder
+ .format(|buf, record| {
+ let now = Local::now();
+ let timestamp = now.format("%y-%-m-%-d %H:%M:%S");
+ let level = record.level();
+ let args = record.args();
+
+ let (prefix, color_code) = match level {
+ Level::Error => (t!("logger.error").trim().to_string(), "\x1b[31m"),
+ Level::Warn => (t!("logger.warn").trim().to_string(), "\x1b[33m"),
+ Level::Info => (t!("logger.info").trim().to_string(), "\x1b[37m"),
+ Level::Debug => (t!("logger.debug").trim().to_string(), "\x1b[90m"),
+ Level::Trace => (t!("logger.trace").trim().to_string(), "\x1b[36m"),
+ };
+
+ let colored_prefix = if prefix.is_empty() {
+ String::new()
+ } else {
+ format!("{}[{}] {}: \x1b[0m", color_code, timestamp, prefix)
+ };
+
+ writeln!(buf, "{}{}", colored_prefix, args)
+ })
+ .init();
+}