]> git.proxmox.com Git - ceph.git/blob - ceph/src/pmdk/src/tools/rpmemd/rpmemd_log.h
import ceph 16.2.7
[ceph.git] / ceph / src / pmdk / src / tools / rpmemd / rpmemd_log.h
1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright 2016-2020, Intel Corporation */
3
4 /*
5 * rpmemd_log.h -- rpmemd logging functions declarations
6 */
7
8 #include <string.h>
9 #include "util.h"
10
11 #define FORMAT_PRINTF(a, b) __attribute__((__format__(__printf__, (a), (b))))
12
13 /*
14 * The tab character is not allowed in rpmemd log,
15 * because it is not well handled by syslog.
16 * Please use RPMEMD_LOG_INDENT instead.
17 */
18 #define RPMEMD_LOG_INDENT " "
19
20 #ifdef DEBUG
21 #define RPMEMD_LOG(level, fmt, arg...) do {\
22 COMPILE_ERROR_ON(strchr(fmt, '\t') != 0);\
23 rpmemd_log(RPD_LOG_##level, __FILE__, __LINE__, fmt, ## arg);\
24 } while (0)
25 #else
26 #define RPMEMD_LOG(level, fmt, arg...) do {\
27 COMPILE_ERROR_ON(strchr(fmt, '\t') != 0);\
28 rpmemd_log(RPD_LOG_##level, NULL, 0, fmt, ## arg);\
29 } while (0)
30 #endif
31
32 #ifdef DEBUG
33 #define RPMEMD_DBG(fmt, arg...) do {\
34 COMPILE_ERROR_ON(strchr(fmt, '\t') != 0);\
35 rpmemd_log(_RPD_LOG_DBG, __FILE__, __LINE__, fmt, ## arg);\
36 } while (0)
37 #else
38 #define RPMEMD_DBG(fmt, arg...) do {} while (0)
39 #endif
40
41 #define RPMEMD_ERR(fmt, arg...) do {\
42 RPMEMD_LOG(ERR, fmt, ## arg);\
43 } while (0)
44
45 #define RPMEMD_FATAL(fmt, arg...) do {\
46 RPMEMD_LOG(ERR, fmt, ## arg);\
47 abort();\
48 } while (0)
49
50 #define RPMEMD_ASSERT(cond) do {\
51 if (!(cond)) {\
52 rpmemd_log(RPD_LOG_ERR, __FILE__, __LINE__,\
53 "assertion fault: %s", #cond);\
54 abort();\
55 }\
56 } while (0)
57
58 enum rpmemd_log_level {
59 RPD_LOG_ERR,
60 RPD_LOG_WARN,
61 RPD_LOG_NOTICE,
62 RPD_LOG_INFO,
63 _RPD_LOG_DBG, /* disallow to use this with LOG macro */
64 MAX_RPD_LOG,
65 };
66
67 enum rpmemd_log_level rpmemd_log_level_from_str(const char *str);
68 const char *rpmemd_log_level_to_str(enum rpmemd_log_level level);
69
70 extern enum rpmemd_log_level rpmemd_log_level;
71 int rpmemd_log_init(const char *ident, const char *fname, int use_syslog);
72 void rpmemd_log_close(void);
73 int rpmemd_prefix(const char *fmt, ...) FORMAT_PRINTF(1, 2);
74 void rpmemd_log(enum rpmemd_log_level level, const char *fname,
75 int lineno, const char *fmt, ...) FORMAT_PRINTF(4, 5);