summaryrefslogtreecommitdiffstats
path: root/src/log.rs
diff options
context:
space:
mode:
authorqkzk <qu3nt1n@gmail.com>2022-11-05 07:41:29 +0100
committerqkzk <qu3nt1n@gmail.com>2022-11-05 07:41:29 +0100
commit1679ca1811da1085451da6b490d7b26e163bf601 (patch)
tree1cca38ce6107f036370d1c6249d644c8526f9e3b /src/log.rs
parent49d1d0e7bf9167c2e6784f9b9a9019a76e90b51e (diff)
logging with log4rs. Rolling, replaced all eprints with info!
Diffstat (limited to 'src/log.rs')
-rw-r--r--src/log.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/log.rs b/src/log.rs
new file mode 100644
index 0000000..c878085
--- /dev/null
+++ b/src/log.rs
@@ -0,0 +1,53 @@
+use log::LevelFilter;
+use log4rs::{
+ append::rolling_file::{
+ policy::compound::{
+ roll::fixed_window::FixedWindowRoller, trigger::size::SizeTrigger, CompoundPolicy,
+ },
+ RollingFileAppender,
+ },
+ config::{Appender, Config, Root},
+ encode::pattern::PatternEncoder,
+ filter::threshold::ThresholdFilter,
+ Handle,
+};
+
+use crate::fm_error::FmResult;
+
+static LOG_PATH: &str = "~/.config/fm/fm.log";
+
+pub fn set_logger() -> FmResult<Handle> {
+ let window_size = 3; // log0, log1, log2
+ let fixed_window_roller = FixedWindowRoller::builder()
+ .build("log{}", window_size)
+ .unwrap();
+ let size_limit = 5 * 1024; // 5KB as max log file size to roll
+ let size_trigger = SizeTrigger::new(size_limit);
+ let compound_policy =
+ CompoundPolicy::new(Box::new(size_trigger), Box::new(fixed_window_roller));
+ let log_path = shellexpand::tilde(LOG_PATH).to_string();
+
+ // Log Trace level output to file where trace is the default level
+ // and the programmatically specified level to stderr.
+ let config = Config::builder()
+ .appender(
+ Appender::builder()
+ .filter(Box::new(ThresholdFilter::new(LevelFilter::Debug)))
+ .build(
+ &log_path,
+ Box::new(
+ RollingFileAppender::builder()
+ .encoder(Box::new(PatternEncoder::new("{d} {l}::{m}{n}")))
+ .build(&log_path, Box::new(compound_policy))?,
+ ),
+ ),
+ )
+ .build(Root::builder().appender(&log_path).build(LevelFilter::Info))
+ .unwrap();
+
+ // Use this to change log levels at runtime.
+ // This means you can change the default log level to trace
+ // if you are trying to debug an issue and need more logs on then turn it off
+ // once you are done.
+ Ok(log4rs::init_config(config)?)
+}