hyperlane_log/log/
impl.rs

1use crate::*;
2
3impl<F, T> LogFuncTrait<T> for F
4where
5    F: Fn(T) -> String + Send + Sync,
6    T: ToString,
7{
8}
9
10impl Default for Log {
11    fn default() -> Self {
12        Self {
13            path: DEFAULT_LOG_DIR.to_owned(),
14            limit_file_size: DEFAULT_LOG_FILE_SIZE,
15        }
16    }
17}
18
19impl Log {
20    pub fn new(path: &str, limit_file_size: usize) -> Self {
21        Self {
22            path: path.into(),
23            limit_file_size,
24        }
25    }
26
27    pub fn is_enable(&self) -> bool {
28        self.get_limit_file_size() != &DISABLE_LOG_FILE_SIZE
29    }
30
31    pub fn is_disable(&self) -> bool {
32        !self.is_enable()
33    }
34
35    fn write_sync<T, L>(&self, data: T, func: L, dir: &str) -> &Self
36    where
37        T: ToString,
38        L: LogFuncTrait<T>,
39    {
40        if self.is_disable() {
41            return self;
42        }
43        let out: String = func(data);
44        let path: String = get_log_path(dir, self.get_path(), self.get_limit_file_size());
45        let _ = append_to_file(&path, &out.as_bytes());
46        self
47    }
48
49    async fn write_async<T, L>(&self, data: T, func: L, dir: &str) -> &Self
50    where
51        T: ToString,
52        L: LogFuncTrait<T>,
53    {
54        if self.is_disable() {
55            return self;
56        }
57        let out: String = func(data);
58        let path = get_log_path(dir, self.get_path(), self.get_limit_file_size());
59        let _ = async_append_to_file(&path, &out.as_bytes()).await;
60        self
61    }
62
63    pub fn error<T, L>(&self, data: T, func: L) -> &Self
64    where
65        T: ToString,
66        L: LogFuncTrait<T>,
67    {
68        self.write_sync(data, func, ERROR_DIR)
69    }
70
71    pub async fn async_error<T, L>(&self, data: T, func: L) -> &Self
72    where
73        T: ToString,
74        L: LogFuncTrait<T>,
75    {
76        self.write_async(data, func, ERROR_DIR).await
77    }
78
79    pub fn info<T, L>(&self, data: T, func: L) -> &Self
80    where
81        T: ToString,
82        L: LogFuncTrait<T>,
83    {
84        self.write_sync(data, func, INFO_DIR)
85    }
86
87    pub async fn async_info<T, L>(&self, data: T, func: L) -> &Self
88    where
89        T: ToString,
90        L: LogFuncTrait<T>,
91    {
92        self.write_async(data, func, INFO_DIR).await
93    }
94
95    pub fn debug<T, L>(&self, data: T, func: L) -> &Self
96    where
97        T: ToString,
98        L: LogFuncTrait<T>,
99    {
100        self.write_sync(data, func, DEBUG_DIR)
101    }
102
103    pub async fn async_debug<T, L>(&self, data: T, func: L) -> &Self
104    where
105        T: ToString,
106        L: LogFuncTrait<T>,
107    {
108        self.write_async(data, func, DEBUG_DIR).await
109    }
110}