kovi_plugin_live_agent/
log.rs

1//! Log methods default to [indoc] format.
2//!
3//! # Examples  
4//! ```
5//! std_error!(
6//!     "
7//!     Write bot log to database failed: {e}
8//!     Log: {content}
9//!     "
10//! );
11//! ```
12//!
13//! which is equivalent to  
14//! ```
15//! kovi::log::error!("Write bot log to database failed: {e}\nLog: {content}")
16//! ```
17//!
18//! Depending on demand, a log can be volatile or non-volatile.  
19//! 1. kovi: use std_debug, std_info, std_warn, std_error  
20//! 2. database: use db_debug, db_info, db_warn, db_error  
21//! 3. both: use std_db_debug, std_db_info, std_db_warn, std_db_error  
22//!
23//! Pitfalls  
24//! 1. db_* and std_db_* must be in async context  
25//! 2. [indoc] does not trim trailing spaces
26
27/// Append debug log entry to stdout
28#[macro_export]
29macro_rules! std_debug {
30    ($($t:tt)*) => {{
31        let content = indoc::formatdoc!($($t)*);
32        kovi::log::debug!("{}", content);
33    }};
34}
35
36/// Append info log entry to stdout
37#[macro_export]
38macro_rules! std_info {
39    ($($t:tt)*) => {{
40        let content = indoc::formatdoc!($($t)*);
41        kovi::log::info!("{}", content);
42    }};
43}
44
45/// Append warn log entry to stdout
46#[macro_export]
47macro_rules! std_warn {
48    ($($t:tt)*) => {{
49        let content = indoc::formatdoc!($($t)*);
50        kovi::log::warn!("{}", content);
51    }};
52}
53
54/// Append error log entry to stdout
55#[macro_export]
56macro_rules! std_error {
57    ($($t:tt)*) => {{
58        let content = indoc::formatdoc!($($t)*);
59        kovi::log::error!("{}", content);
60    }};
61}
62
63/// Append debug log entry to database.
64#[macro_export]
65macro_rules! db_debug {
66    ($($t:tt)*) => {{
67        let content = indoc::formatdoc!($($t)*);
68        let time = $crate::util::cur_time_iso8601();
69        $crate::store::db_write_bot_log(time, "DEBUG".to_string(), content).await;
70    }};
71}
72
73/// Append info log entry to database.
74#[macro_export]
75macro_rules! db_info {
76    ($($t:tt)*) => {{
77        let content = indoc::formatdoc!($($t)*);
78        let time = $crate::util::cur_time_iso8601();
79        $crate::store::db_write_bot_log(time, "INFO".to_string(), content).await;
80    }};
81}
82
83/// Append warn log entry to database.
84#[macro_export]
85macro_rules! db_warn {
86    ($($t:tt)*) => {{
87        let content = indoc::formatdoc!($($t)*);
88        let time = $crate::util::cur_time_iso8601();
89        $crate::store::db_write_bot_log(time, "WARN".to_string(), content).await;
90    }};
91}
92
93/// Append error log entry to database.
94#[macro_export]
95macro_rules! db_error {
96    ($($t:tt)*) => {{
97        let content = indoc::formatdoc!($($t)*);
98        let time = $crate::util::cur_time_iso8601();
99        $crate::store::db_write_bot_log(time, "ERROR".to_string(), content).await;
100    }};
101}
102
103/// Append debug log entry to stdout and database.
104#[macro_export]
105macro_rules! std_db_debug {
106    ($($t:tt)*) => {{
107        let content = indoc::formatdoc!($($t)*);
108        let time = $crate::util::cur_time_iso8601();
109        kovi::log::debug!("{}", content);
110        $crate::store::db_write_bot_log(time, "DEBUG".to_string(), content).await;
111    }};
112}
113
114/// Append info log entry to stdout and database.
115#[macro_export]
116macro_rules! std_db_info {
117    ($($t:tt)*) => {{
118        let content = indoc::formatdoc!($($t)*);
119        let time = $crate::util::cur_time_iso8601();
120        kovi::log::info!("{}", content);
121        $crate::store::db_write_bot_log(time, "INFO".to_string(), content).await;
122    }};
123}
124
125/// Append warn log entry to stdout and database.
126#[macro_export]
127macro_rules! std_db_warn {
128    ($($t:tt)*) => {{
129        let content = indoc::formatdoc!($($t)*);
130        let time = $crate::util::cur_time_iso8601();
131        kovi::log::warn!("{}", content);
132        $crate::store::db_write_bot_log(time, "WARN".to_string(), content).await;
133    }};
134}
135
136/// Append error log entry to stdout and database.
137#[macro_export]
138macro_rules! std_db_error {
139    ($($t:tt)*) => {{
140        let content = indoc::formatdoc!($($t)*);
141        let time = $crate::util::cur_time_iso8601();
142        kovi::log::error!("{}", content);
143        $crate::store::db_write_bot_log(time, "ERROR".to_string(), content).await;
144    }};
145}