tklog/
asyncmulti.rs

1// Copyright (c) 2024, donnie4w <donnie4w@gmail.com>
2// All rights reserved.
3// https://github.com/donnie4w/tklog
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9//     http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
17// Trace log macros, call secondary macro processing logic
18#[macro_export]
19macro_rules! async_traces {
20    ($logger:expr, $($arg:expr),+) => {
21        $crate::async_logs_common!($logger, $crate::LEVEL::Trace, $($arg),*);
22    };
23    () => {};
24}
25
26//Debug log macro, call secondary macro processing logic
27#[macro_export]
28macro_rules! async_debugs {
29    ($logger:expr, $($arg:expr),+) => {
30        $crate::async_logs_common!($logger, $crate::LEVEL::Debug, $($arg),*);
31    };
32    () => {};
33}
34
35//Info log macro, call secondary macro processing logic
36#[macro_export]
37macro_rules! async_infos {
38    ($logger:expr, $($arg:expr),+) => {
39        $crate::async_logs_common!($logger, $crate::LEVEL::Info, $($arg),*);
40    };
41    () => {};
42}
43
44// warn log macro, call secondary macro processing logic
45#[macro_export]
46macro_rules! async_warns {
47    ($logger:expr, $($arg:expr),+) => {
48        $crate::async_logs_common!($logger, $crate::LEVEL::Warn, $($arg),*);
49    };
50    () => {};
51}
52
53// Error log macro, call secondary macro processing logic
54#[macro_export]
55macro_rules! async_errors {
56    ($logger:expr, $($arg:expr),+) => {
57        $crate::async_logs_common!($logger, $crate::LEVEL::Error, $($arg),*);
58    };
59    () => {};
60}
61
62// Fatal log macros, call secondary macro processing logic
63#[macro_export]
64macro_rules! async_fatals {
65    ($logger:expr, $($arg:expr),+) => {
66        $crate::async_logs_common!($logger, $crate::LEVEL::Fatal, $($arg),*);
67    };
68    () => {};
69}
70
71#[macro_export]
72macro_rules! async_formats {
73    ($logger:expr, $level:expr, $($arg:expr),*) => {
74        unsafe {
75            let logger_lock:&mut Arc<tokio::sync::Mutex<tklog::Async::Logger>> = $logger;
76            let mut logger = logger_lock.as_ref().lock().await;
77            let level:$crate::LEVEL = $level;
78            let module = module_path!();
79            if logger.get_level(module) <= level {
80                let mut file = "";
81                let mut line = 0;
82                if logger.is_file_line($level,module) {
83                    file = file!();
84                    line = line!();
85                }
86                let ss = logger.fmt(module,$level, file, line, format!($($arg),*));
87                if !ss.is_empty(){
88                    logger.print($level,module,ss.as_str()).await;
89                }
90            }
91        }
92    };
93    () => {};
94}
95
96#[macro_export]
97macro_rules! async_logs_common {
98    ($logger:expr, $level:expr, $($arg:expr),*) => {
99        unsafe {
100            let logger_lock:&mut Arc<tokio::sync::Mutex<tklog::Async::Logger>> = $logger;
101            let mut logger = logger_lock.as_ref().lock().await;
102            let module = module_path!();
103            if logger.get_level(module) <= $level {
104                let formatted_args: Vec<String> = vec![$(format!("{}", $arg)),*];
105                let mut file = "";
106                let mut line = 0;
107                if logger.is_file_line($level,module) {
108                    file = file!();
109                    line = line!();
110                }
111                let msg: String = formatted_args.join(logger.get_separator().as_str());
112                let ss = logger.fmt(module,$level, file, line, msg);
113                if !ss.is_empty(){
114                    logger.print($level,module,ss.as_str()).await;
115                }
116            }
117        }
118    };
119    () => {};
120}