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