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<P: ToString>(path: P, limit_file_size: usize) -> Self {
21        Self {
22            path: path.to_string(),
23            limit_file_size,
24        }
25    }
26
27    pub fn path<P: ToString>(&mut self, path: P) -> &mut Self {
28        self.path = path.to_string();
29        self
30    }
31
32    pub fn limit_file_size(&mut self, limit_file_size: usize) -> &mut Self {
33        self.limit_file_size = limit_file_size;
34        self
35    }
36
37    pub fn is_enable(&self) -> bool {
38        self.limit_file_size != DISABLE_LOG_FILE_SIZE
39    }
40
41    pub fn is_disable(&self) -> bool {
42        !self.is_enable()
43    }
44
45    fn write_sync<T, L>(&self, data: T, func: L, dir: &str) -> &Self
46    where
47        T: ToString,
48        L: LogFuncTrait<T>,
49    {
50        if self.is_disable() {
51            return self;
52        }
53        let out: String = func(data);
54        let path: String = get_log_path(dir, &self.path, &self.limit_file_size);
55        let _ = append_to_file(&path, &out.as_bytes());
56        self
57    }
58
59    async fn write_async<T, L>(&self, data: T, func: L, dir: &str) -> &Self
60    where
61        T: ToString,
62        L: LogFuncTrait<T>,
63    {
64        if self.is_disable() {
65            return self;
66        }
67        let out: String = func(data);
68        let path: String = get_log_path(dir, &self.path, &self.limit_file_size);
69        let _ = async_append_to_file(&path, &out.as_bytes()).await;
70        self
71    }
72
73    pub fn error<T, L>(&self, data: T, func: L) -> &Self
74    where
75        T: ToString,
76        L: LogFuncTrait<T>,
77    {
78        self.write_sync(data, func, ERROR_DIR)
79    }
80
81    pub async fn async_error<T, L>(&self, data: T, func: L) -> &Self
82    where
83        T: ToString,
84        L: LogFuncTrait<T>,
85    {
86        self.write_async(data, func, ERROR_DIR).await
87    }
88
89    pub fn info<T, L>(&self, data: T, func: L) -> &Self
90    where
91        T: ToString,
92        L: LogFuncTrait<T>,
93    {
94        self.write_sync(data, func, INFO_DIR)
95    }
96
97    pub async fn async_info<T, L>(&self, data: T, func: L) -> &Self
98    where
99        T: ToString,
100        L: LogFuncTrait<T>,
101    {
102        self.write_async(data, func, INFO_DIR).await
103    }
104
105    pub fn debug<T, L>(&self, data: T, func: L) -> &Self
106    where
107        T: ToString,
108        L: LogFuncTrait<T>,
109    {
110        self.write_sync(data, func, DEBUG_DIR)
111    }
112
113    pub async fn async_debug<T, L>(&self, data: T, func: L) -> &Self
114    where
115        T: ToString,
116        L: LogFuncTrait<T>,
117    {
118        self.write_async(data, func, DEBUG_DIR).await
119    }
120}