acl  3.5.3.0
acl_msg.h
浏览该文件的文档.
1 #ifndef ACL_MSG_INCLUDE_H
2 #define ACL_MSG_INCLUDE_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #include "acl_define.h"
9 #include <stdarg.h>
10 #include "acl_vstream.h"
11 
12 #undef USE_PRINTF_MACRO
13 
14 /**
15  * 在将写日志至日志文件前回调用户自定义的函数,且将日志信息传递给该函数,
16  * 只有当用户通过 acl_msg_pre_write 进行设置后才生效
17  * @param ctx {void*} 用户的自定义参数
18  * @param fmt {const char*} 格式参数
19  * @param ap {va_list} 格式参数列表
20  */
21 typedef void (*ACL_MSG_PRE_WRITE_FN)(void *ctx, const char *fmt, va_list ap);
22 
23 /**
24  * 应用通过此函数类型可以自定义日志打开函数,当应用在打开日志前调用
25  * acl_msg_register 注册了自定义打开函数,则当应用调用 acl_msg_open
26  * 时会调用此定义打开日志函数打开日志,否则则用缺省的方法打开日志文件
27  * @param file_name {const char*} 回传给自定义日志打开函数的参数,即
28  * 将日志文件回传
29  * @param ctx {void*} 应用传递进去的参数
30  * @return {int} 如果自定义打开日志函数返回 -1 则调用缺省的日志打开函数
31  */
32 typedef int (*ACL_MSG_OPEN_FN) (const char *file_name, void *ctx);
33 
34 /**
35  * 应用通过此函数类型可以自定义日志关闭函数,当应用在打开日志前调用
36  * acl_msg_register 注册了自定义打开函数,则当应用调用 acl_msg_close
37  * 时会调用此定义关闭日志函数关闭日志,否则则用缺省的方法关闭日志文件
38  * @param ctx {void*} 应用传递进去的参数
39  */
40 typedef void (*ACL_MSG_CLOSE_FN) (void *ctx);
41 
42 /**
43  * 应用通过此函数类型可以自定义日志记录函数,当应用在打开日志前调用
44  * acl_msg_register 注册了自定义记录函数,则当应用写日志时便用此自定义
45  * 函数记录日志,否则用缺省的日志记录函数
46  * @param ctx {void*} 应用传递进去的参数
47  * @param fmt {const char*} 格式参数
48  * @param ap {va_list} 参数列表
49  */
50 typedef void (*ACL_MSG_WRITE_FN) (void *ctx, const char *fmt, va_list ap);
51 
52 /**
53  * 在打开日志前调用此函数注册应用自己的日志打开函数、日志关闭函数、日志记录函数
54  * @param open_fn {ACL_MSG_OPEN_FN} 自定义日志打开函数
55  * @param close_fn {ACL_MSG_CLOSE_FN} 自定义日志关闭函数
56  * @param write_fn {ACL_MSG_WRITE_FN} 自定义日志记录函数
57  * @param ctx {void*} 自定义参数
58  */
59 ACL_API void acl_msg_register(ACL_MSG_OPEN_FN open_fn, ACL_MSG_CLOSE_FN close_fn,
60  ACL_MSG_WRITE_FN write_fn, void *ctx);
61 
62 /**
63  * 将 acl_msg_register 注册自定义函数清除,采用缺省的日志函数集
64  */
65 ACL_API void acl_msg_unregister(void);
66 
67 /**
68  * 在打开日志前调用此函数注册应用的私有函数,在记录日志前会先记录信息通过
69  * 此注册的函数传递给应用
70  * @param pre_write {ACL_MSG_PRE_WRITE_FN} 日志记录前调用的函数
71  * @param ctx {void*} 自定义参数
72  */
73 ACL_API void acl_msg_pre_write(ACL_MSG_PRE_WRITE_FN pre_write, void *ctx);
74 
75 /**
76  * 全局变量,表示调试级别
77  * @DEPRECATED 将来该参数将只会内部使用,外部应用不应用它
78  */
79 extern ACL_API int acl_msg_verbose;
80 
81 /**
82  * 当未调用 acl_msg_open 方式打开日志时,调用了 acl_msg_info/error/fatal/warn
83  * 的操作,是否允许信息输出至标准输出屏幕上,通过此函数来设置该开关,该开关
84  * 仅影响是否需要将信息输出至终端屏幕而不影响是否输出至文件中
85  * @param onoff {int} 非 0 表示允许输出至屏幕
86  */
87 ACL_API void acl_msg_stdout_enable(int onoff);
88 
89 /**
90  * 当调用 acl_msg_error_xxx/acl_msg_warn_xxx 等函数记录出错或警告类型的日志时
91  * 是否需要记录调用堆栈,可由该函数进行设置
92  * @param onoff {int} 非 0 表示允许记录调用出错/警告日志的堆栈,缺省不记录
93  */
94 ACL_API void acl_msg_trace_enable(int onoff);
95 
96 /**
97  * 日志打开函数
98  * @param log_file {const char*} 日志接收者集合,由 "|" 分隔,接收器
99  * 可以是本地文件或远程套接口,如:
100  * /tmp/test.log|UDP:127.0.0.1:12345|TCP:127.0.0.1:12345|UNIX:/tmp/test.sock
101  * 该配置要求将所有日志同时发给 /tmp/test.log, UDP:127.0.0.1:12345,
102  * TCP:127.0.0.1:12345 和 UNIX:/tmp/test.sock 四个日志接收器对象
103  * @param info_pre {const char*} 日志记录信息前的提示信息
104  */
105 ACL_API void acl_msg_open(const char *log_file, const char *info_pre);
106 
107 /**
108  * 日志打开函数
109  * @param fp {ACL_VSTREAM *} 日志文件流句柄
110  * @param info_pre {const char*} 日志记录信息前的提示信息
111  */
112 ACL_API void acl_msg_open2(ACL_VSTREAM *fp, const char *info_pre);
113 
114 /**
115  * 关闭日志函数
116  */
117 ACL_API void acl_msg_close(void);
118 
119 /**
120  * 当记录日志信息至日志文件时,需要调用如下的日志记录函数
121  */
122 
123 #ifndef USE_PRINTF_MACRO
124 
125 /**
126  * 一般级别日志信息记录函数
127  * @param fmt {const char*} 参数格式
128  * @param ... 变参序列
129  */
130 ACL_API void ACL_PRINTF(1, 2) acl_msg_info(const char *fmt,...);
131 
132 /**
133  * 警告级别日志信息记录函数
134  * @param fmt {const char*} 参数格式
135  * @param ... 变参序列
136  */
137 ACL_API void ACL_PRINTF(1, 2) acl_msg_warn(const char *fmt,...);
138 
139 /**
140  * 错误级别日志信息记录函数
141  * @param fmt {const char*} 参数格式
142  * @param ... 变参序列
143  */
144 ACL_API void ACL_PRINTF(1, 2) acl_msg_error(const char *fmt,...);
145 
146 /**
147  * 致命级别日志信息记录函数
148  * @param fmt {const char*} 参数格式
149  * @param ... 变参序列
150  */
151 ACL_API void ACL_PRINTF(1, 2) acl_msg_fatal(const char *fmt,...);
152 
153 /**
154  * 致命级别日志信息记录函数
155  * @param status {int} 当前未用
156  * @param fmt {const char*} 参数格式
157  * @param ... 变参序列
158  */
159 ACL_API void ACL_PRINTF(2, 3)
160  acl_msg_fatal_status(int status, const char *fmt,...);
161 
162 /**
163  * 恐慌级别日志信息记录函数
164  * @param fmt {const char*} 参数格式
165  * @param ... 变参序列
166  */
167 ACL_API void ACL_PRINTF(1, 2) acl_msg_panic(const char *fmt,...);
168 
169 /**
170  * 一般级别日志信息记录函数
171  * @param fmt {const char*} 参数格式
172  * @param ap {va_list} 变参列表
173  */
174 ACL_API void acl_msg_info2(const char *fmt, va_list ap);
175 
176 
177 /**
178  * 警告级别日志信息记录函数
179  * @param fmt {const char*} 参数格式
180  * @param ap {va_list} 变参列表
181  */
182 ACL_API void acl_msg_warn2(const char *fmt, va_list ap);
183 
184 /**
185  * 错误级别日志信息记录函数
186  * @param fmt {const char*} 参数格式
187  * @param ap {va_list} 变参列表
188  */
189 ACL_API void acl_msg_error2(const char *fmt, va_list ap);
190 
191 
192 /**
193  * 致命级别日志信息记录函数
194  * @param fmt {const char*} 参数格式
195  * @param ap {va_list} 变参列表
196  */
197 ACL_API void acl_msg_fatal2(const char *fmt, va_list ap);
198 
199 /**
200  * 致命级别日志信息记录函数
201  * @param status {int} 当前未用
202  * @param fmt {const char*} 参数格式
203  * @param ap {va_list} 变参列表
204  */
205 ACL_API void acl_msg_fatal_status2(int status, const char *fmt, va_list ap);
206 
207 /**
208  * 恐慌级别日志信息记录函数
209  * @param fmt {const char*} 参数格式
210  * @param ap {va_list} 变参列表
211  */
212 ACL_API void acl_msg_panic2(const char *fmt, va_list ap);
213 #else
214 
215 /**
216  * 当记录日志信息至标准输出时,需要调用如下的日志记录函数
217  */
218 
219 #include <stdio.h>
220 
221 #undef acl_msg_info
222 #undef acl_msg_warn
223 #undef acl_msg_error
224 #undef acl_msg_fatal
225 #undef acl_msg_panic
226 
227 #define acl_msg_info acl_msg_printf
228 #define acl_msg_warn acl_msg_printf
229 #define acl_msg_error acl_msg_printf
230 #define acl_msg_fatal acl_msg_printf
231 #define acl_msg_panic acl_msg_printf
232 
233 #endif
234 
235 /**
236  * 类似于标准C的 strerror, 但该函数是跨平台且是线程安全的,获得对应某个错误
237  * 号的错误描述信息
238  * @param errnum {unsigned int} 错误号
239  * @param buffer {char*} 存储错误描述信息的内存缓冲区
240  * @param size {int} buffer 缓冲区的大小
241  * @return {const char*} 返回的地址应与 buffer 相同
242  */
243 ACL_API const char *acl_strerror(unsigned int errnum, char *buffer, int size);
244 ACL_API const char *acl_strerror1(unsigned int errnum);
245 
246 /**
247  * 获得上次系统调用出错时的错误描述信息
248  * @param buffer {char*} 存储错误描述信息的内存缓冲区
249  * @param size {int} buffer 的空间大小
250  * @return {const char*} 返回的地址应与 buffer 相同
251  */
252 ACL_API const char *acl_last_strerror(char *buffer, int size);
253 
254 /**
255  * 获得上次系统调用出错时的错误描述信息,该函数内部采用了线程局部变量,所以是线程
256  * 安全的,但使用起来更简单些
257  * @return {const char *} 返回错误提示信息
258  */
259 ACL_API const char *acl_last_serror(void);
260 
261 /**
262  * 获得上次系统调用出错时的错误号
263  * @return {int} 错误号
264  */
265 ACL_API int acl_last_error(void);
266 
267 /**
268  * 手工设置错误号
269  * @param errnum {int} 错误号
270  */
271 ACL_API void acl_set_error(int errnum);
272 
273 /**
274  * 输出信息至标准输出
275  * @param fmt {const char*} 格式参数
276  * @param ... 变参序列
277  */
278 ACL_API void ACL_PRINTF(1, 2) acl_msg_printf(const char *fmt,...);
279 
280 #ifdef __cplusplus
281 }
282 #endif
283 
284 #endif
285 
ACL_API void acl_msg_open(const char *log_file, const char *info_pre)
ACL_API int acl_last_error(void)
ACL_API void acl_msg_pre_write(ACL_MSG_PRE_WRITE_FN pre_write, void *ctx)
void(* ACL_MSG_WRITE_FN)(void *ctx, const char *fmt, va_list ap)
Definition: acl_msg.h:50
void(* ACL_MSG_CLOSE_FN)(void *ctx)
Definition: acl_msg.h:40
int(* ACL_MSG_OPEN_FN)(const char *file_name, void *ctx)
Definition: acl_msg.h:32
ACL_API void ACL_PRINTF(1, 2) acl_msg_info(const char *fmt
ACL_API const char * acl_last_strerror(char *buffer, int size)
ACL_API void ACL_API void ACL_API void ACL_API void ACL_API void const char ACL_API void ACL_API void acl_msg_info2(const char *fmt, va_list ap)
ACL_API void acl_msg_warn2(const char *fmt, va_list ap)
ACL_API void acl_set_error(int errnum)
ACL_API const char * acl_strerror(unsigned int errnum, char *buffer, int size)
ACL_API void acl_msg_unregister(void)
void(* ACL_MSG_PRE_WRITE_FN)(void *ctx, const char *fmt, va_list ap)
Definition: acl_msg.h:21
ACL_API void acl_msg_error2(const char *fmt, va_list ap)
ACL_API void acl_msg_close(void)
ACL_API void acl_msg_fatal_status2(int status, const char *fmt, va_list ap)
ACL_API void acl_msg_fatal2(const char *fmt, va_list ap)
ACL_API void acl_msg_trace_enable(int onoff)
ACL_API void ACL_API void ACL_API void ACL_API void ACL_API void const char * fmt
Definition: acl_msg.h:160
ACL_API void acl_msg_open2(ACL_VSTREAM *fp, const char *info_pre)
ACL_API const char * acl_strerror1(unsigned int errnum)
ACL_API void acl_msg_stdout_enable(int onoff)
ACL_API int acl_msg_verbose
ACL_API void acl_msg_panic2(const char *fmt, va_list ap)
ACL_API void acl_msg_register(ACL_MSG_OPEN_FN open_fn, ACL_MSG_CLOSE_FN close_fn, ACL_MSG_WRITE_FN write_fn, void *ctx)
ACL_API const char * acl_last_serror(void)