1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use crate::appender::{FastLogRecord, LogAppender};
use std::cell::RefCell;
use std::fs::{File, OpenOptions, DirBuilder};
use std::io::Write;
pub struct FileAppender {
file: RefCell<File>,
}
impl FileAppender {
pub fn new(log_file_path: &str) -> FileAppender {
let log_file_path = log_file_path.replace("\\", "/");
if let Some(right) = log_file_path.rfind("/") {
let path = &log_file_path[0..right];
std::fs::create_dir_all(path);
}
Self {
file: RefCell::new(
OpenOptions::new()
.create(true)
.append(true)
.open(&log_file_path)
.unwrap(),
),
}
}
}
impl LogAppender for FileAppender {
fn do_log(&self, record: &mut FastLogRecord) {
let mut log_file = self.file.borrow_mut();
let mut buf = vec![];
for x in record.formated.bytes() {
buf.push(x);
}
log_file.write_all(buf.as_slice());
log_file.flush();
}
}