Skip to content

Commit

Permalink
Implement rolling logfile output (#15)
Browse files Browse the repository at this point in the history
  • Loading branch information
Turbo87 authored Feb 9, 2025
1 parent dac7016 commit f63526f
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.sqlx/
logs/
clubfridge.db

# Generated by Cargo
Expand Down
74 changes: 74 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ serde_json = "=1.0.138"
sqlx = { version = "=0.8.3", features = ["runtime-tokio", "sqlite"] }
tokio = { version = "=1.43.0", features = ["time"] }
tracing = "=0.1.41"
tracing-appender = "=0.2.3"
tracing-subscriber = "=0.3.19"
ulid = "=1.2.0"
vereinsflieger = "=0.7.0"
Expand Down
62 changes: 62 additions & 0 deletions src/logging.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
use tracing_subscriber::filter::Targets;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
use tracing_subscriber::Layer;

const DEFAULT_TARGETS: &str = "warn,clubfridge_neo=debug";

pub fn init() -> anyhow::Result<()> {
let targets = targets_from_env();

let stdout_layer = tracing_subscriber::fmt::layer()
.compact()
.with_filter(targets.clone());

let file_appender = tracing_appender::rolling::Builder::new()
.rotation(tracing_appender::rolling::Rotation::DAILY)
.filename_prefix("clubfridge-neo")
.filename_suffix("log")
.max_log_files(7)
.build("logs")?;

let logfile_layer = tracing_subscriber::fmt::layer()
.compact()
.with_ansi(false)
.with_writer(file_appender)
.with_filter(targets);

Ok(tracing_subscriber::registry()
.with(stdout_layer)
.with(logfile_layer)
.try_init()?)
}

fn targets_from_env() -> Targets {
let targets = match std::env::var("RUST_LOG") {
Ok(value) => value,
Err(std::env::VarError::NotPresent) => return default_targets(),
Err(err) => {
eprintln!("Ignoring `RUST_LOG`: {err}");
return default_targets();
}
};

targets.parse().unwrap_or_else(|err| {
eprintln!("Ignoring `RUST_LOG={targets:?}`: {err}");
default_targets()
})
}

fn default_targets() -> Targets {
DEFAULT_TARGETS.parse().unwrap()
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_default_targets_does_not_panic() {
default_targets();
}
}
3 changes: 2 additions & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
mod database;
mod logging;
mod popup;
mod running;
mod setup;
Expand All @@ -10,7 +11,7 @@ mod vereinsflieger;
use crate::state::{ClubFridge, Options};

pub fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init();
logging::init()?;

let options = <Options as clap::Parser>::parse();

Expand Down

0 comments on commit f63526f

Please sign in to comment.