From 058e68204379e912635a7e26c14b4a4f23d1162e Mon Sep 17 00:00:00 2001 From: Victor Mignot Date: Sun, 30 Apr 2023 23:20:34 +0200 Subject: [PATCH] Config logging from code instead of yaml --- log4rs_config.yaml | 60 -------------------------------- src/logs.rs | 85 ++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 4 ++- 3 files changed, 88 insertions(+), 61 deletions(-) delete mode 100644 log4rs_config.yaml create mode 100644 src/logs.rs diff --git a/log4rs_config.yaml b/log4rs_config.yaml deleted file mode 100644 index 52b5452..0000000 --- a/log4rs_config.yaml +++ /dev/null @@ -1,60 +0,0 @@ -refresh_rate: 30 seconds - -appenders: - - stdout: - kind: console - encoder: - pattern: "{d(%Y-%m-%d %H:%M:%S)} | {({l}):5.5} | {f}:{L} — {m}{n}" - - rolling_logs: - kind: rolling_file - path: logs/yorokobot-latest.log - encoder: - pattern: "{d(%Y-%m-%d %H:%M:%S)} | {({l}):5.5} | {f}:{L} — {m}{n}" - policy: - trigger: # Specify when to switch to another log file - kind: size - limit: 30 mb - - roller: # Specify what to do with older logs files - kind: fixed_window - pattern: logs/yorokobot_{}.gz - count: 10 - - rolling_debug: - kind: rolling_file - path: logs/traces-latest.log - encoder: - pattern: "{d(%Y-%m-%d %H:%M:%S)} | {({l}):5.5} | {f}:{L} — {m}{n}" - policy: - trigger: - kind: size - limit: 30 mb - - roller: - kind: fixed_window - pattern: logs/yorokobot_traces_{}.gz - count: 20 - -root: - level: info - appenders: - - stdout - -loggers: - serenity: - level: error - - tracing: - level: error - - logs: - level: info - appenders: - - rolling_logs - - bot_traces: - level: debug - appenders: - - rolling_debug diff --git a/src/logs.rs b/src/logs.rs new file mode 100644 index 0000000..388ac30 --- /dev/null +++ b/src/logs.rs @@ -0,0 +1,85 @@ +use log4rs::{ + append::{ + console::ConsoleAppender, + rolling_file::{ + policy::compound::{ + roll::fixed_window::FixedWindowRoller, trigger::size::SizeTrigger, CompoundPolicy, + }, + RollingFileAppender, + }, + }, + config::{Appender, Logger, Root}, + encode::pattern::PatternEncoder, + Config, +}; + +const FILE_MAX_SIZE: u64 = 30000000; +const LOGS_MAX_FILES: u32 = 10; +const DEBUG_MAX_FILES: u32 = 20; + +const LOG_FORMAT: &str = "{d(%Y-%m-%d %H:%M:%S)} | {({l}):5.5} | {f}:{L} — {m}{n}"; +const LOGS_FILE: &str = "logs/yorokobot_latest.log"; +const DEBUG_FILE: &str = "logs/debug/yorokobot_debug_latest.log"; +const LOGS_ARCHIVE_FILE_PATTERN: &str = "logs/yorokobot_{}.gz"; +const DEBUG_ARCHIVE_FILE_PATTERN: &str = "logs/debug/yorokobot_debug_{}.gz"; + +/// Configure the bot logger +pub fn init_logger() { + // Logs patterns + let encoder = PatternEncoder::new(LOG_FORMAT); + + // Rollings logs trigger + let size_triger = SizeTrigger::new(FILE_MAX_SIZE); + + // Rolling logs roller + let logs_roller = FixedWindowRoller::builder() + .build(LOGS_ARCHIVE_FILE_PATTERN, LOGS_MAX_FILES) + .unwrap(); + let rolling_debug = FixedWindowRoller::builder() + .build(DEBUG_ARCHIVE_FILE_PATTERN, DEBUG_MAX_FILES) + .unwrap(); + + // Rolling logs policy + let rolling_logs_policy = CompoundPolicy::new(Box::new(size_triger), Box::new(logs_roller)); + let rolling_debug_policy = CompoundPolicy::new(Box::new(size_triger), Box::new(rolling_debug)); + + // Appenders + let stdout = ConsoleAppender::builder() + .encoder(Box::new(encoder.clone())) + .build(); + let rolling_logs = RollingFileAppender::builder() + .encoder(Box::new(encoder.clone())) + .build(LOGS_FILE, Box::new(rolling_logs_policy)) + .unwrap(); + let rolling_debug = RollingFileAppender::builder() + .encoder(Box::new(encoder)) + .build(DEBUG_FILE, Box::new(rolling_debug_policy)) + .unwrap(); + + let config = Config::builder() + .appender(Appender::builder().build("stdout", Box::new(stdout))) + .appender(Appender::builder().build("rolling_logs", Box::new(rolling_logs))) + .appender(Appender::builder().build("rolling_debug", Box::new(rolling_debug))) + // Don't print the serenity crate logs + .logger(Logger::builder().build("serenity", log::LevelFilter::Error)) + // Don't print the tracing crate logs + .logger(Logger::builder().build("tracing", log::LevelFilter::Error)) + .logger( + Logger::builder() + .appender("rolling_logs") + .build("logs", log::LevelFilter::Info), + ) + .logger( + Logger::builder() + .appender("rolling_debug") + .build("bot_debug", log::LevelFilter::Debug), + ) + .build( + Root::builder() + .appender("stdout") + .build(log::LevelFilter::Info), + ) + .unwrap(); + + log4rs::init_config(config).unwrap(); +} diff --git a/src/main.rs b/src/main.rs index 0c70bdc..217ef2e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,13 +10,15 @@ mod client; mod database; mod discord; mod environment; +mod logs; use client::Client; +use logs::init_logger; #[tokio::main] async fn main() { // Start the logger - log4rs::init_file("log4rs_config.yaml", Default::default()).unwrap(); + init_logger(); let mut client = Client::new().await;