aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorraphCode <15750438+raphCode@users.noreply.github.com>2022-06-28 13:38:43 +0200
committerGitHub <noreply@github.com>2022-06-28 13:38:43 +0200
commit7cd355efaf9de3221880da4ea06cbf804f6bca1e (patch)
treee0d1bca71613c7e6933bec54ec5e614460a18084
parentdocs(changelog): reset scroll properly (diff)
downloadsl0ppij-7cd355efaf9de3221880da4ea06cbf804f6bca1e.tar.gz
sl0ppij-7cd355efaf9de3221880da4ea06cbf804f6bca1e.tar.xz
sl0ppij-7cd355efaf9de3221880da4ea06cbf804f6bca1e.zip
roll over logs / fix filling up /tmp with logs (#1548)
* roll over logs at 20 MB * Change cap to 100 kB * Add fix to changelog
-rw-r--r--CHANGELOG.md1
-rw-r--r--zellij-utils/src/logging.rs39
2 files changed, 33 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c949fe60..ea281f1a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -52,6 +52,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
* fix: properly handle in-place editor in full-screen (https://github.com/zellij-org/zellij/pull/1544)
* Terminal compatibility: properly trim whitespace in lines with wide-characters when resizing panes (https://github.com/zellij-org/zellij/pull/1545)
* fix: reset scroll properly when typing in certain edge cases (https://github.com/zellij-org/zellij/pull/1547)
+* fix: logging may fill up /tmp, now logs are capped at 100 kB (https://github.com/zellij-org/zellij/pull/1548)
## [0.30.0] - 2022-06-07
* fix: right and middle clicks creating selection (https://github.com/zellij-org/zellij/pull/1372)
diff --git a/zellij-utils/src/logging.rs b/zellij-utils/src/logging.rs
index b9746fc9..d8f1f09b 100644
--- a/zellij-utils/src/logging.rs
+++ b/zellij-utils/src/logging.rs
@@ -9,37 +9,62 @@ use std::{
use log::LevelFilter;
-use log4rs::append::file::FileAppender;
+use log4rs::append::rolling_file::{
+ policy::compound::{
+ roll::fixed_window::FixedWindowRoller, trigger::size::SizeTrigger, CompoundPolicy,
+ },
+ RollingFileAppender,
+};
use log4rs::config::{Appender, Config, Logger, Root};
use log4rs::encode::pattern::PatternEncoder;
use crate::consts::{ZELLIJ_TMP_DIR, ZELLIJ_TMP_LOG_DIR, ZELLIJ_TMP_LOG_FILE};
use crate::shared::set_permissions;
+const LOG_MAX_BYTES: u64 = 1024 * 100;
+
pub fn configure_logger() {
atomic_create_dir(&*ZELLIJ_TMP_DIR).unwrap();
atomic_create_dir(&*ZELLIJ_TMP_LOG_DIR).unwrap();
atomic_create_file(&*ZELLIJ_TMP_LOG_FILE).unwrap();
+ let trigger = SizeTrigger::new(LOG_MAX_BYTES);
+ let roller = FixedWindowRoller::builder()
+ .build(
+ ZELLIJ_TMP_LOG_DIR
+ .join("zellij.log.old.{}")
+ .to_str()
+ .unwrap(),
+ 1,
+ )
+ .unwrap();
+
// {n} means platform dependent newline
// module is padded to exactly 25 bytes and thread is padded to be between 10 and 15 bytes.
let file_pattern = "{highlight({level:<6})} |{module:<25.25}| {date(%Y-%m-%d %H:%M:%S.%3f)} [{thread:<10.15}] [{file}:{line}]: {message} {n}";
// default zellij appender, should be used across most of the codebase.
- let log_file = FileAppender::builder()
+ let log_file = RollingFileAppender::builder()
.encoder(Box::new(PatternEncoder::new(file_pattern)))
- .append(true)
- .build(&*ZELLIJ_TMP_LOG_FILE)
+ .build(
+ &*ZELLIJ_TMP_LOG_FILE,
+ Box::new(CompoundPolicy::new(
+ Box::new(trigger),
+ Box::new(roller.clone()),
+ )),
+ )
.unwrap();
// plugin appender. To be used in loggin_pipe to forward stderr output from plugins. We do some formatting
// in logging_pipe to print plugin name as 'module' and plugin_id instead of thread.
- let log_plugin = FileAppender::builder()
+ let log_plugin = RollingFileAppender::builder()
.encoder(Box::new(PatternEncoder::new(
"{highlight({level:<6})} {message} {n}",
)))
- .append(true)
- .build(&*ZELLIJ_TMP_LOG_FILE)
+ .build(
+ &*ZELLIJ_TMP_LOG_FILE,
+ Box::new(CompoundPolicy::new(Box::new(trigger), Box::new(roller))),
+ )
.unwrap();
// Set the default logging level to "info" and log it to zellij.log file