Skip to content

Commit 7323cce

Browse files
authored
Merge pull request #74 from drdo/print-log-file
Print log file instead of just directory
2 parents 1df54c9 + 4a34421 commit 7323cce

File tree

6 files changed

+139
-64
lines changed

6 files changed

+139
-64
lines changed

Cargo.lock

Lines changed: 83 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ chrono = { version = "0.4", features = ["serde"] }
1717
clap = { version = "4", features = ["derive", "env"] }
1818
crossterm = "0.28"
1919
directories = "5"
20-
flexi_logger = "0.28"
20+
simplelog = "0.12"
2121
humansize = "2"
2222
indicatif = "0.17"
2323
log = "0.4"
2424
rand = "0.8"
2525
ratatui = { version = "0.28", features = [
26-
"unstable-rendered-line-info",
27-
"unstable-widget-ref",
26+
"unstable-rendered-line-info",
27+
"unstable-widget-ref",
2828
] }
2929
rpassword = "7.3.1"
3030
rusqlite = { version = "0.32", features = ["bundled", "functions", "trace"] }

src/args.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub struct Args {
1515
}
1616

1717
impl Args {
18-
/// Parse arguments from std::env::args_os(), exit on error.
18+
/// Parse arguments from env::args_os(), exit on error.
1919
pub fn parse() -> Self {
2020
let cli = Cli::parse();
2121

src/cache/tests.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use std::{cmp::Reverse, convert::Infallible, fs, iter, mem, path::PathBuf};
1+
use std::{
2+
cmp::Reverse, convert::Infallible, env, fs, iter, mem, path::PathBuf,
3+
};
24

35
use camino::{Utf8Path, Utf8PathBuf};
46
use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc};
@@ -39,7 +41,7 @@ impl Drop for Tempfile {
3941

4042
impl Tempfile {
4143
pub fn new() -> Self {
42-
let mut path = std::env::temp_dir();
44+
let mut path = env::temp_dir();
4345
path.push(Uuid::new_v4().to_string());
4446
Tempfile(path)
4547
}

src/main.rs

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::{
22
fs,
3-
io::stderr,
3+
io::{self, stderr},
44
sync::{
55
atomic::{AtomicBool, Ordering},
66
mpsc::{self, RecvTimeoutError},
@@ -13,6 +13,7 @@ use std::{
1313
use anyhow::Context;
1414
use args::Args;
1515
use camino::{Utf8Path, Utf8PathBuf};
16+
use chrono::Local;
1617
use crossterm::{
1718
event::{KeyCode, KeyModifiers},
1819
terminal::{
@@ -22,9 +23,8 @@ use crossterm::{
2223
ExecutableCommand,
2324
};
2425
use directories::ProjectDirs;
25-
use flexi_logger::{FileSpec, Logger, WriteMode};
2626
use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
27-
use log::{error, info, trace};
27+
use log::{debug, error, info, trace, LevelFilter};
2828
use rand::{seq::SliceRandom, thread_rng};
2929
use ratatui::{
3030
backend::{Backend, CrosstermBackend},
@@ -38,6 +38,7 @@ use redu::{
3838
restic::{self, escape_for_exclude, Restic, Snapshot},
3939
};
4040
use scopeguard::defer;
41+
use simplelog::{ThreadLogMode, WriteLogger};
4142
use thiserror::Error;
4243
use util::snapshot_short_id;
4344

@@ -54,21 +55,39 @@ fn main() -> anyhow::Result<()> {
5455
let dirs = ProjectDirs::from("eu", "drdo", "redu")
5556
.expect("unable to determine project directory");
5657

57-
let _logger = {
58-
let mut directory = dirs.data_local_dir().to_path_buf();
59-
directory.push(Utf8Path::new("logs"));
58+
// Initialize the logger
59+
{
60+
fn generate_filename() -> String {
61+
format!("{}.log", Local::now().format("%Y-%m-%dT%H:%M:%S%.f%:z"))
62+
}
6063

61-
eprintln!("Logging to {:#?}", directory);
64+
let mut path = dirs.data_local_dir().to_path_buf();
65+
path.push(Utf8Path::new("logs"));
66+
fs::create_dir_all(&path)?;
67+
path.push(generate_filename());
68+
let file = loop {
69+
// Spin until we hit a timestamp that isn't taken yet.
70+
// With the level of precision that we are using this should virtually
71+
// never run more than once.
72+
match fs::OpenOptions::new()
73+
.write(true)
74+
.create_new(true)
75+
.open(&path)
76+
{
77+
Err(err) if err.kind() == io::ErrorKind::AlreadyExists =>
78+
path.set_file_name(generate_filename()),
79+
x => break x,
80+
}
81+
}?;
6282

63-
let filespec =
64-
{ FileSpec::default().directory(directory).suppress_basename() };
83+
eprintln!("Logging to {:#?}", path);
6584

66-
Logger::with(args.log_level)
67-
.log_to_file(filespec)
68-
.write_mode(WriteMode::BufferAndFlush)
69-
.format(flexi_logger::with_thread)
70-
.start()?
71-
};
85+
let config = simplelog::ConfigBuilder::new()
86+
.set_target_level(LevelFilter::Error)
87+
.set_thread_mode(ThreadLogMode::Names)
88+
.build();
89+
WriteLogger::init(args.log_level, config, file)?;
90+
}
7291

7392
unsafe {
7493
rusqlite::trace::config_log(Some(|code, msg| {
@@ -292,17 +311,15 @@ fn fetching_thread_body(
292311
"snapshot fetched in {}s ({short_id})",
293312
start.elapsed().as_secs_f64()
294313
);
295-
trace!("got snapshot, sending ({short_id})");
296314
if should_quit.load(Ordering::SeqCst) {
297315
return Ok(());
298316
}
299317
let start = Instant::now();
300318
snapshot_sender.send((snapshot.clone(), sizetree)).unwrap();
301-
info!(
319+
debug!(
302320
"waited {}s to send snapshot ({short_id})",
303321
start.elapsed().as_secs_f64()
304322
);
305-
trace!("snapshot sent ({short_id})");
306323
}
307324
Ok(())
308325
}
@@ -332,7 +349,7 @@ fn db_thread_body(
332349
// We wait with timeout to poll the should_quit periodically
333350
match snapshot_receiver.recv_timeout(should_quit_poll_period) {
334351
Ok((snapshot, sizetree)) => {
335-
info!(
352+
debug!(
336353
"waited {}s to get snapshot",
337354
start.elapsed().as_secs_f64()
338355
);
@@ -498,7 +515,7 @@ fn ui(mut cache: Cache) -> anyhow::Result<Vec<Utf8PathBuf>> {
498515
fn render<'a>(
499516
terminal: &'a mut Terminal<impl Backend>,
500517
app: &App,
501-
) -> std::io::Result<CompletedFrame<'a>> {
518+
) -> io::Result<CompletedFrame<'a>> {
502519
terminal.draw(|frame| {
503520
let area = frame.area();
504521
let buf = frame.buffer_mut();

0 commit comments

Comments
 (0)