Skip to content

Commit

Permalink
add impl CanPack
Browse files Browse the repository at this point in the history
  • Loading branch information
zhuxiujia committed Jul 28, 2024
1 parent 0943894 commit 7fe44c0
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 18 deletions.
5 changes: 2 additions & 3 deletions example/src/split_log_duration.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
use fast_log::config::Config;
use fast_log::plugin::file_split::{PackType, KeepType};
use fast_log::plugin::file_split::{PackType, KeepType, DurationType};
use std::thread::sleep;
use std::time::Duration;
use fastdate::DateTime;
use fast_log::plugin::packer::LogPacker;


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/",
PackType::ByDuration((DateTime::now(),Duration::from_secs(5))),
PackType::ByDuration(DurationType::new(Duration::from_secs(5))),
KeepType::KeepNum(5),
LogPacker {},
))
Expand Down
50 changes: 35 additions & 15 deletions src/plugin/file_split.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,14 +165,14 @@ pub enum DiffDateType {
}

pub struct DateType {
inner: DateTime,
last: DateTime,
pub diff: DiffDateType,
}

impl DateType {
pub fn new(arg: DiffDateType) -> Self {
Self {
inner: DateTime::now(),
last: DateTime::now(),
diff: arg,
}
}
Expand All @@ -184,10 +184,28 @@ impl Default for DateType {
}
}


pub struct DurationType {
last: DateTime,
pub start_time: DateTime,
pub duration: Duration,
}

impl DurationType {
pub fn new(d: Duration) -> Self {
let now = DateTime::now();
Self {
last: now.clone(),
start_time: now,
duration: d,
}
}
}

pub enum PackType {
ByDate(DateType),
BySize(LogSize),
ByDuration((DateTime, Duration)),
ByDuration(DurationType),
ByCustom(Box<dyn CanPack>),
}

Expand All @@ -198,27 +216,27 @@ impl CanPack for PackType {
let dt = DateTime::from_system_time(arg.now, fastdate::offset_sec());
let diff = match date_type.diff {
DiffDateType::Sec => {
dt.sec() != date_type.inner.sec()
dt.sec() != date_type.last.sec()
}
DiffDateType::Hour => {
dt.hour() != date_type.inner.hour()
dt.hour() != date_type.last.hour()
}
DiffDateType::Minute => {
dt.minute() != date_type.inner.minute()
dt.minute() != date_type.last.minute()
}
DiffDateType::Day => {
dt.day() != date_type.inner.day()
dt.day() != date_type.last.day()
}
DiffDateType::Month => {
dt.mon() != date_type.inner.mon()
dt.mon() != date_type.last.mon()
}
DiffDateType::Year => {
dt.year() != date_type.inner.year()
dt.year() != date_type.last.year()
}
};
if diff {
let log_name = temp_name.replace(".log", &date_type.inner.format("YYYY-MM-DDThh-mm-ss.000000.log"));
date_type.inner = dt;
let log_name = temp_name.replace(".log", &date_type.last.format("YYYY-MM-DDThh-mm-ss.000000.log"));
date_type.last = dt;
Some(log_name)
} else {
None
Expand All @@ -231,15 +249,17 @@ impl CanPack for PackType {
None
}
}
PackType::ByDuration((start_time, d)) => {
PackType::ByDuration(duration_type) => {
let dt = DateTime::from_system_time(arg.now, fastdate::offset_sec());
let next = start_time.clone().add(d.clone());
let next = duration_type.start_time.clone().add(duration_type.duration.clone());
if dt >= next {
let now = DateTime::now();
let log_name = temp_name.replace(".log", &now.format("YYYY-MM-DDThh-mm-ss.000000.log"));
*start_time = now;
let log_name = temp_name.replace(".log", &duration_type.last.format("YYYY-MM-DDThh-mm-ss.000000.log"));
duration_type.start_time = now;
duration_type.last = dt;
Some(log_name)
} else {
duration_type.last = dt;
None
}
}
Expand Down

0 comments on commit 7fe44c0

Please sign in to comment.