Add support for Solaris/x86 (bug #3064)
[asterisk/asterisk.git] / include / asterisk / logger.h
1 /*
2  * Cheops Next Generation
3  * 
4  * Mark Spencer <markster@marko.net>
5  *
6  * Copyright(C) Mark Spencer
7  * 
8  * Distributed under the terms of the GNU General Public License (GPL) Version
9  *
10  * Logging routines
11  *
12  */
13
14 #ifndef _LOGGER_H
15 #define _LOGGER_H
16 #ifdef SOLARIS
17 #include <solaris-compat/compat.h>
18 #endif
19 #include <stdarg.h>
20
21 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "C" {
23 #endif
24
25 #define EVENTLOG "event_log"
26
27 #define DEBUG_M(a) { \
28         a; \
29 }
30
31 /*! Used for sending a log message */
32 /*!
33  * \param level don't need to worry about it
34  * \param file ditto
35  * \param line ditto
36  * \param function ditto
37  * \param fmt this is what is important.  The format is the same as your favorite breed of printf.  You know how that works, right? :-)
38  * This is the standard logger function.  Probably the only way you will invoke it would be something like this:
39  * ast_log(LOG_WHATEVER, "Problem with the %s Captain.  We should get some more.  Will %d be enough?", "flux capacitor", 10);
40  * where WHATEVER is one of ERROR, DEBUG, EVENT, NOTICE, or WARNING depending on which log you wish to output to.
41  */
42 extern void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...)
43         __attribute__ ((format (printf, 5, 6)));
44
45 extern void ast_queue_log(const char *queuename, const char *callid, const char *agent, const char *event, const char *fmt, ...)
46         __attribute__ ((format (printf, 5, 6)));
47
48 /*! Send a verbose message (based on verbose level) */
49 /*!
50  * This works like ast_log, but prints verbose messages to the console depending on verbosity level set.
51  * ast_verbose(VERBOSE_PREFIX_3 "Whatever %s is happening\n", "nothing");
52  * This will print the message to the console if the verbose level is set to a level >= 3
53  * Note the abscence of a comma after the VERBOSE_PREFIX_3.  This is important.
54  * VERBOSE_PREFIX_1 through VERBOSE_PREFIX_3 are defined.
55  */
56 extern void ast_verbose(const char *fmt, ...)
57         __attribute__ ((format (printf, 1, 2)));
58
59 extern int ast_register_verbose(void (*verboser)(const char *string, int opos, int replacelast, int complete));
60 extern int ast_unregister_verbose(void (*verboser)(const char *string, int opos, int replacelast, int complete));
61 extern int ast_verbose_dmesg(void (*verboser)(const char *string, int opos, int replacelast, int complete));
62 extern void ast_console_puts(const char *string);
63
64 #define _A_ __FILE__, __LINE__, __PRETTY_FUNCTION__
65
66 #ifdef LOG_DEBUG
67 #undef LOG_DEBUG
68 #endif
69 #define __LOG_DEBUG    0
70 #define LOG_DEBUG      __LOG_DEBUG, _A_
71
72 #ifdef LOG_EVENT
73 #undef LOG_EVENT
74 #endif
75 #define __LOG_EVENT    1
76 #define LOG_EVENT      __LOG_EVENT, _A_
77
78 #ifdef LOG_NOTICE
79 #undef LOG_NOTICE
80 #endif
81 #define __LOG_NOTICE   2
82 #define LOG_NOTICE     __LOG_NOTICE, _A_
83
84 #ifdef LOG_WARNING
85 #undef LOG_WARNING
86 #endif
87 #define __LOG_WARNING  3
88 #define LOG_WARNING    __LOG_WARNING, _A_
89
90 #ifdef LOG_ERROR
91 #undef LOG_ERROR
92 #endif
93 #define __LOG_ERROR    4
94 #define LOG_ERROR      __LOG_ERROR, _A_
95
96 #ifdef LOG_VERBOSE
97 #undef LOG_VERBOSE
98 #endif
99 #define __LOG_VERBOSE  5
100 #define LOG_VERBOSE    __LOG_VERBOSE, _A_
101
102 #if defined(__cplusplus) || defined(c_plusplus)
103 }
104 #endif
105
106
107 #endif