00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _ASTERISK_LOGGER_H
00026 #define _ASTERISK_LOGGER_H
00027
00028 #include "asterisk/options.h"
00029
00030 #if defined(__cplusplus) || defined(c_plusplus)
00031 extern "C" {
00032 #endif
00033
00034 #define EVENTLOG "event_log"
00035 #define QUEUELOG "queue_log"
00036
00037 #define DEBUG_M(a) { \
00038 a; \
00039 }
00040
00041 #define VERBOSE_PREFIX_1 " "
00042 #define VERBOSE_PREFIX_2 " == "
00043 #define VERBOSE_PREFIX_3 " -- "
00044 #define VERBOSE_PREFIX_4 " > "
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...)
00061 __attribute__((format(printf, 5, 6)));
00062
00063 void ast_backtrace(void);
00064
00065
00066 int logger_reload(void);
00067
00068 void __attribute__((format(printf, 5, 6))) ast_queue_log(const char *queuename, const char *callid, const char *agent, const char *event, const char *fmt, ...);
00069
00070
00071
00072
00073
00074
00075
00076
00077 void __attribute__((format(printf, 4, 5))) __ast_verbose(const char *file, int line, const char *func, const char *fmt, ...);
00078
00079 #define ast_verbose(...) __ast_verbose(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__)
00080
00081 void __attribute__((format(printf, 4, 0))) __ast_verbose_ap(const char *file, int line, const char *func, const char *fmt, va_list ap);
00082
00083 #define ast_verbose_ap(fmt, ap) __ast_verbose_ap(__FILE__, __LINE__, __PRETTY_FUNCTION__, fmt, ap)
00084
00085 void __attribute__((format(printf, 2, 3))) ast_child_verbose(int level, const char *fmt, ...);
00086
00087 int ast_register_verbose(void (*verboser)(const char *string)) attribute_warn_unused_result;
00088 int ast_unregister_verbose(void (*verboser)(const char *string)) attribute_warn_unused_result;
00089
00090 void ast_console_puts(const char *string);
00091
00092
00093
00094
00095
00096
00097 void ast_console_puts_mutable(const char *string, int level);
00098 void ast_console_toggle_mute(int fd, int silent);
00099
00100
00101
00102
00103
00104
00105
00106 void ast_console_toggle_loglevel(int fd, int level, int state);
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 #define _A_ __FILE__, __LINE__, __PRETTY_FUNCTION__
00117
00118 #ifdef LOG_DEBUG
00119 #undef LOG_DEBUG
00120 #endif
00121 #define __LOG_DEBUG 0
00122 #define LOG_DEBUG __LOG_DEBUG, _A_
00123
00124 #ifdef AST_LOG_DEBUG
00125 #undef AST_LOG_DEBUG
00126 #endif
00127 #define AST_LOG_DEBUG __LOG_DEBUG, _A_
00128
00129 #ifdef LOG_NOTICE
00130 #undef LOG_NOTICE
00131 #endif
00132 #define __LOG_NOTICE 2
00133 #define LOG_NOTICE __LOG_NOTICE, _A_
00134
00135 #ifdef AST_LOG_NOTICE
00136 #undef AST_LOG_NOTICE
00137 #endif
00138 #define AST_LOG_NOTICE __LOG_NOTICE, _A_
00139
00140 #ifdef LOG_WARNING
00141 #undef LOG_WARNING
00142 #endif
00143 #define __LOG_WARNING 3
00144 #define LOG_WARNING __LOG_WARNING, _A_
00145
00146 #ifdef AST_LOG_WARNING
00147 #undef AST_LOG_WARNING
00148 #endif
00149 #define AST_LOG_WARNING __LOG_WARNING, _A_
00150
00151 #ifdef LOG_ERROR
00152 #undef LOG_ERROR
00153 #endif
00154 #define __LOG_ERROR 4
00155 #define LOG_ERROR __LOG_ERROR, _A_
00156
00157 #ifdef AST_LOG_ERROR
00158 #undef AST_LOG_ERROR
00159 #endif
00160 #define AST_LOG_ERROR __LOG_ERROR, _A_
00161
00162 #ifdef LOG_VERBOSE
00163 #undef LOG_VERBOSE
00164 #endif
00165 #define __LOG_VERBOSE 5
00166 #define LOG_VERBOSE __LOG_VERBOSE, _A_
00167
00168 #ifdef AST_LOG_VERBOSE
00169 #undef AST_LOG_VERBOSE
00170 #endif
00171 #define AST_LOG_VERBOSE __LOG_VERBOSE, _A_
00172
00173 #ifdef LOG_DTMF
00174 #undef LOG_DTMF
00175 #endif
00176 #define __LOG_DTMF 6
00177 #define LOG_DTMF __LOG_DTMF, _A_
00178
00179 #ifdef AST_LOG_DTMF
00180 #undef AST_LOG_DTMF
00181 #endif
00182 #define AST_LOG_DTMF __LOG_DTMF, _A_
00183
00184 #define NUMLOGLEVELS 7
00185
00186
00187
00188
00189
00190
00191 unsigned int ast_debug_get_by_module(const char *module);
00192
00193
00194
00195
00196
00197
00198 unsigned int ast_verbose_get_by_module(const char *module);
00199
00200
00201
00202
00203
00204
00205
00206
00207 int ast_logger_register_level(const char *name);
00208
00209
00210
00211
00212
00213
00214
00215 void ast_logger_unregister_level(const char *name);
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229 #define ast_log_dynamic_level(level, ...) ast_log(level, __FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__)
00230
00231
00232
00233
00234
00235
00236 #define ast_debug(level, ...) do { \
00237 if (option_debug >= (level) || (ast_opt_dbg_module && ast_debug_get_by_module(AST_MODULE) >= (level)) ) \
00238 ast_log(AST_LOG_DEBUG, __VA_ARGS__); \
00239 } while (0)
00240
00241 #define VERBOSITY_ATLEAST(level) (option_verbose >= (level) || (ast_opt_verb_module && ast_verbose_get_by_module(AST_MODULE) >= (level)))
00242
00243 #define ast_verb(level, ...) do { \
00244 if (VERBOSITY_ATLEAST((level)) ) { \
00245 if (level >= 4) \
00246 ast_verbose(VERBOSE_PREFIX_4 __VA_ARGS__); \
00247 else if (level == 3) \
00248 ast_verbose(VERBOSE_PREFIX_3 __VA_ARGS__); \
00249 else if (level == 2) \
00250 ast_verbose(VERBOSE_PREFIX_2 __VA_ARGS__); \
00251 else if (level == 1) \
00252 ast_verbose(VERBOSE_PREFIX_1 __VA_ARGS__); \
00253 else \
00254 ast_verbose(__VA_ARGS__); \
00255 } \
00256 } while (0)
00257
00258 #ifndef _LOGGER_BACKTRACE_H
00259 #define _LOGGER_BACKTRACE_H
00260 #ifdef HAVE_BKTR
00261 #define AST_MAX_BT_FRAMES 32
00262
00263
00264
00265
00266
00267 struct ast_bt {
00268
00269 void *addresses[AST_MAX_BT_FRAMES];
00270
00271 int num_frames;
00272
00273 unsigned int alloced:1;
00274 };
00275
00276
00277
00278
00279
00280
00281
00282 struct ast_bt *ast_bt_create(void);
00283
00284
00285
00286
00287
00288
00289
00290
00291 int ast_bt_get_addresses(struct ast_bt *bt);
00292
00293
00294
00295
00296
00297
00298
00299
00300 void *ast_bt_destroy(struct ast_bt *bt);
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310 char **ast_bt_get_symbols(void **addresses, size_t num_frames);
00311
00312 #endif
00313 #endif
00314
00315 #if defined(__cplusplus) || defined(c_plusplus)
00316 }
00317 #endif
00318
00319 #endif