hyperlane_log/log/
impl.rs1use 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}