Skip to content

Commit

Permalink
add impl PackType
Browse files Browse the repository at this point in the history
  • Loading branch information
zhuxiujia committed Jul 26, 2024
1 parent 2e980ee commit 41be29b
Showing 1 changed file with 6 additions and 53 deletions.
59 changes: 6 additions & 53 deletions example/src/split_log_date.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,69 +7,22 @@ use std::io::{Read, Write};
use std::thread::sleep;
use std::time::Duration;
use fastdate::DateTime;
use fast_log::plugin::packer::LogPacker;

///pack by an date
#[derive(Clone)]
pub struct DateLogPacker {}

impl Packer for DateLogPacker {
fn pack_name(&self) -> &'static str {
"log"
}

fn do_pack(&self, mut log_file: File, log_file_path: &str) -> Result<bool, LogError> {
impl DateLogPacker {
pub fn new_log_name(&self, first_file_path: &str, date: fastdate::DateTime) -> String {
let file_name = first_file_path.extract_file_name();
let mut new_log_name = date.to_string().replace(" ", "T").replace(":", "-");
new_log_name.push_str(".");
new_log_name.push_str(self.pack_name());
new_log_name =
first_file_path.trim_end_matches(&file_name).to_string() + &new_log_name;
return new_log_name;
}
}
//do nothing,and not remove file
let now = DateTime::now();
let name = self.new_log_name(log_file_path, now);
let mut f = OpenOptions::new()
.write(true)
.read(true)
.append(true)
.open(&name);
if let Ok(mut f) = f {
//append to file
let mut data = vec![];
log_file.read_to_end(&mut data)?;
f.write_all(&data)?;
std::fs::remove_file(log_file_path)?;
} else {
//create file
f = OpenOptions::new().write(true).create(true).open(name);
if let Ok(mut f) = f {
let mut data = vec![];
log_file.read_to_end(&mut data)?;
f.write_all(&data)?;
std::fs::remove_file(log_file_path)?;
}
}
return Ok(false);
}
}

fn main() {
//file_path also can use '"target/logs/test.log"'
fast_log::init(Config::new().chan_len(Some(100000)).console().file_split(
"target/logs/",
KeepType::KeepNum(2),
DateLogPacker {},
PackType::ByDate(DateTime::now()),
KeepType::KeepNum(2),
LogPacker {},
))
.unwrap();
for _ in 0..40000 {
for _ in 0..60 {
sleep(Duration::from_secs(1));
log::info!("Commencing yak shaving");
}
log::logger().flush();
println!("you can see log files in path: {}", "target/logs/");
sleep(Duration::from_secs(3));
println!("you can see log files in path: {}", "target/logs/")
}

0 comments on commit 41be29b

Please sign in to comment.