use ntime;
use std::env;
use std::path;
use std::process;
use crate::format;
use crate::sink::file;
use crate::sink::io::IO;
pub struct LogFileConfig {
pub log_directory: path::PathBuf,
pub formatter_cfg: format::FormatterConfig,
pub buffered: bool,
pub flush_on_write: bool,
pub append: bool,
}
impl<'i> Default for LogFileConfig {
fn default() -> Self {
Self {
log_directory: env::temp_dir(),
formatter_cfg: format::FormatterConfig::default(),
buffered: true,
flush_on_write: false,
append: true,
}
}
}
pub fn new<'f>(conf: LogFileConfig) -> IO<'f> {
let process_name = "process";
let log_file_name = path::PathBuf::from(format!(
"{process_name}_{time}_{pid}.log",
process_name = process_name,
time = ntime::Timestamp::now().as_string(&ntime::Format::UtcFileName),
pid = process::id(),
));
let mut log_path = conf.log_directory;
log_path.push(log_file_name);
file::new(file::FileConfig {
name: format!("log file for {process_name}"),
path: Some(log_path),
formatter_cfg: conf.formatter_cfg,
buffered: conf.buffered,
flush_on_write: conf.flush_on_write,
append: conf.append,
})
}
pub fn default<'f>() -> IO<'f> {
new(LogFileConfig::default())
}
pub fn default_json<'f>() -> IO<'f> {
new(LogFileConfig {
formatter_cfg: format::FormatterConfig {
format: format::OutputFormat::Json,
..format::FormatterConfig::default()
},
..LogFileConfig::default()
})
}