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(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}