From d4dc6cc6bde3c9a7621499e230d65c5030981478 Mon Sep 17 00:00:00 2001 From: Aditya Kulkarni Date: Wed, 2 Oct 2019 10:12:21 -0700 Subject: [PATCH] Fixed-size logs --- Cargo.toml | 3 +-- src/main.rs | 56 +++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ca2cac1..d35a981 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,13 +9,12 @@ futures = "0.1" bytes = "0.4" base58 = "0.1.0" log = "0.4" -log4rs = { version = "0.8.3", default-features = false, features = ["file", "file_appender"]} +log4rs = "0.8.3" dirs = "2.0.2" http = "0.1" prost = "0.5" tokio = "0.1" tower-request-modifier = { git = "https://github.com/tower-rs/tower-http" } -hyper = "0.12" tower-util = "0.1" hex = "0.3" protobuf = "2" diff --git a/src/main.rs b/src/main.rs index 3f589ab..423119c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,15 +8,22 @@ mod prover; mod commands; mod utils; +use std::io::{Result, Error, ErrorKind}; use std::sync::Arc; use std::time::Duration; use lightclient::{LightClient, LightClientConfig}; use log::{info, LevelFilter}; -use log4rs::append::file::FileAppender; +use log4rs::append::rolling_file::RollingFileAppender; use log4rs::encode::pattern::PatternEncoder; use log4rs::config::{Appender, Config, Root}; +use log4rs::filter::threshold::ThresholdFilter; +use log4rs::append::rolling_file::policy::compound::{ + CompoundPolicy, + trigger::size::SizeTrigger, + roll::fixed_window::FixedWindowRoller, +}; use rustyline::error::ReadlineError; use rustyline::Editor; @@ -33,6 +40,37 @@ pub struct SaplingParams; const ANCHOR_OFFSET: u32 = 4; +/// Build the Logging config +fn get_log_config(config: &LightClientConfig) -> Result { + 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)); + + Config::builder() + .appender( + Appender::builder() + .filter(Box::new(ThresholdFilter::new(LevelFilter::Info))) + .build( + "logfile", + Box::new( + RollingFileAppender::builder() + .encoder(Box::new(PatternEncoder::new("{d} {l}::{m}{n}"))) + .build(config.get_log_path(), Box::new(compound_policy))?, + ), + ), + ) + .build( + Root::builder() + .appender("logfile") + .build(LevelFilter::Debug), + ) + .map_err(|e|Error::new(ErrorKind::Other, format!("{}", e))) +} + + pub fn main() { // Get command line arguments let matches = App::new("Zecwallet CLI") @@ -81,15 +119,13 @@ pub fn main() { }; // Configure logging first. - let logfile = FileAppender::builder() - .encoder(Box::new(PatternEncoder::new("{l} -{d(%Y-%m-%d %H:%M:%S)}- {m}\n"))) - .build(config.get_log_path()).unwrap(); - let log_config = Config::builder() - .appender(Appender::builder().build("logfile", Box::new(logfile))) - .build(Root::builder() - .appender("logfile") - .build(LevelFilter::Info)).unwrap(); - + let log_config = match get_log_config(&config) { + Ok(c) => c, + Err(e) => { + eprintln!("Error:\n{}\nCouldn't configure logging, quitting!", e); + return; + } + }; log4rs::init_config(log_config).unwrap(); // Startup