use super::*;
impl<F, T> FileLoggerFuncTrait<T> for F
where
F: Fn(T) -> String + Send + Sync,
T: AsRef<str>,
{
}
impl Default for FileLogger {
#[inline(always)]
fn default() -> Self {
Self {
path: DEFAULT_LOG_DIR.to_owned(),
limit_file_size: DEFAULT_LOG_FILE_SIZE,
trace_dir: TRACE_DIR.to_owned(),
debug_dir: DEBUG_DIR.to_owned(),
info_dir: INFO_DIR.to_owned(),
warn_dir: WARN_DIR.to_owned(),
error_dir: ERROR_DIR.to_owned(),
}
}
}
impl FileLogger {
#[inline(always)]
pub fn new<P: AsRef<str>>(path: P, limit_file_size: usize) -> Self {
Self {
path: path.as_ref().to_owned(),
limit_file_size,
trace_dir: TRACE_DIR.to_owned(),
debug_dir: DEBUG_DIR.to_owned(),
info_dir: INFO_DIR.to_owned(),
warn_dir: WARN_DIR.to_owned(),
error_dir: ERROR_DIR.to_owned(),
}
}
#[inline(always)]
pub fn is_enable(&self) -> bool {
*self.get_limit_file_size() != DISABLE_LOG_FILE_SIZE
}
#[inline(always)]
pub fn is_disable(&self) -> bool {
!self.is_enable()
}
fn write_sync<T, L>(&self, data: T, func: L, dir: &str) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
if self.is_disable() {
return self;
}
let out: String = func(data);
let path: String = get_log_path(dir, self.get_path(), self.get_limit_file_size());
let _: Result<(), Error> = append_to_file(&path, out.as_bytes());
self
}
async fn write_async<T, L>(&self, data: T, func: L, dir: &str) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
if self.is_disable() {
return self;
}
let out: String = func(data);
let path: String = get_log_path(dir, self.get_path(), self.get_limit_file_size());
let _: Result<(), Error> = async_append_to_file(&path, out.as_bytes()).await;
self
}
pub fn trace<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_sync(data, func, self.get_trace_dir())
}
pub async fn async_trace<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_async(data, func, self.get_trace_dir()).await
}
pub fn debug<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_sync(data, func, self.get_debug_dir())
}
pub async fn async_debug<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_async(data, func, self.get_debug_dir()).await
}
pub fn info<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_sync(data, func, self.get_info_dir())
}
pub async fn async_info<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_async(data, func, self.get_info_dir()).await
}
pub fn warn<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_sync(data, func, self.get_warn_dir())
}
pub async fn async_warn<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_async(data, func, self.get_warn_dir()).await
}
pub fn error<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_sync(data, func, self.get_error_dir())
}
pub async fn async_error<T, L>(&self, data: T, func: L) -> &Self
where
T: AsRef<str>,
L: FileLoggerFuncTrait<T>,
{
self.write_async(data, func, self.get_error_dir()).await
}
}