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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 #ifndef dprint_h
00052 #define dprint_h
00053
00054 #ifndef SYSLOG_ASYNC
00055 #include <syslog.h>
00056 #else
00057 #include "syslog_async.h"
00058 #define syslog syslog_async
00059 #endif
00060
00061 #include <time.h>
00062
00063 #define L_ALERT -3
00064 #define L_CRIT -2
00065 #define L_ERR -1
00066 #define L_WARN 1
00067 #define L_NOTICE 2
00068 #define L_INFO 3
00069 #define L_DBG 4
00070
00071
00072 #ifdef __SUNPRO_C
00073 #define DP_PREFIX
00074 #else
00075 #define DP_PREFIX "%s [%d] "
00076 #endif
00077
00078 #define DP_ALERT_TEXT "ALERT:"
00079 #define DP_CRIT_TEXT "CRITICAL:"
00080 #define DP_ERR_TEXT "ERROR:"
00081 #define DP_WARN_TEXT "WARNING:"
00082 #define DP_NOTICE_TEXT "NOTICE:"
00083 #define DP_INFO_TEXT "INFO:"
00084 #define DP_DBG_TEXT "DBG:"
00085
00086 #define DP_ALERT_PREFIX DP_PREFIX DP_ALERT_TEXT
00087 #define DP_CRIT_PREFIX DP_PREFIX DP_CRIT_TEXT
00088 #define DP_ERR_PREFIX DP_PREFIX DP_ERR_TEXT
00089 #define DP_WARN_PREFIX DP_PREFIX DP_WARN_TEXT
00090 #define DP_NOTICE_PREFIX DP_PREFIX DP_NOTICE_TEXT
00091 #define DP_INFO_PREFIX DP_PREFIX DP_INFO_TEXT
00092 #define DP_DBG_PREFIX DP_PREFIX DP_DBG_TEXT
00093
00094
00095
00096 #ifndef MOD_NAME
00097 #define MOD_NAME "core"
00098 #endif
00099
00100 #ifndef NO_DEBUG
00101 #undef NO_LOG
00102 #endif
00103
00104
00105
00106 #if CHANGEABLE_DEBUG_LEVEL
00107
00108 extern int *debug;
00109 #else
00110
00111 extern int debug;
00112 #endif
00113
00114 extern int log_stderr;
00115
00116 extern int log_facility;
00117
00118 extern char* log_name;
00119
00120 extern char ctime_buf[];
00121
00122
00123
00124
00125
00126
00127 int dp_my_pid(void);
00128
00129
00130
00131
00132
00133
00134
00135 void dprint (char* format, ...);
00136
00137
00138
00139
00140
00141
00142
00143 int str2facility(char *s);
00144
00145
00146
00147
00148
00149
00150 void set_proc_debug_level(int level);
00151
00152
00153
00154
00155
00156 void reset_proc_debug_level(void);
00157
00158
00159
00160
00161
00162
00163 inline static char* dp_time(void)
00164 {
00165 time_t ltime;
00166
00167 time(<ime);
00168 ctime_r( <ime, ctime_buf);
00169 ctime_buf[19] = 0;
00170
00171 return ctime_buf+4;
00172 }
00173
00174
00175
00176 #if CHANGEABLE_DEBUG_LEVEL
00177 #define is_printable(_level) ((*debug)>=(_level))
00178 #else
00179 #define is_printable(_level) (debug>=(_level))
00180 #endif
00181
00182 #if defined __GNUC__
00183 #define __DP_FUNC __FUNCTION__
00184 #elif defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
00185 #define __DP_FUNC __func__
00186 #else
00187 #define __DP_FUNC ((__const char *) 0)
00188 #endif
00189
00190
00191 #ifdef NO_LOG
00192
00193 #ifdef __SUNPRO_C
00194 #define LM_GEN2(facility, lev, ...)
00195 #define LM_GEN1(lev, ...)
00196 #define LM_ALERT( ...)
00197 #define LM_CRIT( ...)
00198 #define LM_ERR( ...)
00199 #define LM_WARN( ...)
00200 #define LM_NOTICE( ...)
00201 #define LM_INFO( ...)
00202 #define LM_DBG( ...)
00203 #else
00204 #define LM_GEN2(facility, lev, fmt, args...)
00205 #define LM_GEN1(lev, fmt, args...)
00206 #define LM_ALERT(fmt, args...)
00207 #define LM_CRIT(fmt, args...)
00208 #define LM_ERR(fmt, args...)
00209 #define LM_WARN(fmt, args...)
00210 #define LM_NOTICE(fmt, args...)
00211 #define LM_INFO(fmt, args...)
00212 #define LM_DBG(fmt, args...)
00213 #endif
00214
00215 #else
00216
00217 #ifdef __SUNPRO_C
00218
00219 #define LOG_PREFIX MOD_NAME ": "
00220
00221 #define MY_DPRINT( ...) \
00222 dprint( LOG_PREFIX __VA_ARGS__ ) \
00223
00224 #define MY_SYSLOG( _log_level, ...) \
00225 syslog( (_log_level)|log_facility, \
00226 LOG_PREFIX __VA_ARGS__);\
00227
00228 #define LM_GEN1(_lev, ...) \
00229 LM_GEN2( log_facility, _lev, __VA_ARGS__)
00230
00231 #define LM_GEN2( _facility, _lev, ...) \
00232 do { \
00233 if (is_printable(_lev)){ \
00234 if (log_stderr) dprint (__VA_ARGS__); \
00235 else { \
00236 switch(_lev){ \
00237 case L_CRIT: \
00238 syslog(LOG_CRIT|_facility, __VA_ARGS__); \
00239 break; \
00240 case L_ALERT: \
00241 syslog(LOG_ALERT|_facility, __VA_ARGS__); \
00242 break; \
00243 case L_ERR: \
00244 syslog(LOG_ERR|_facility, __VA_ARGS__); \
00245 break; \
00246 case L_WARN: \
00247 syslog(LOG_WARNING|_facility, __VA_ARGS__);\
00248 break; \
00249 case L_NOTICE: \
00250 syslog(LOG_NOTICE|_facility, __VA_ARGS__); \
00251 break; \
00252 case L_INFO: \
00253 syslog(LOG_INFO|_facility, __VA_ARGS__); \
00254 break; \
00255 case L_DBG: \
00256 syslog(LOG_DEBUG|_facility, __VA_ARGS__); \
00257 break; \
00258 } \
00259 } \
00260 } \
00261 }while(0)
00262
00263 #define LM_ALERT( ...) \
00264 do { \
00265 if (is_printable(L_ALERT)){ \
00266 if (log_stderr)\
00267 MY_DPRINT( DP_ALERT_PREFIX __VA_ARGS__);\
00268 else \
00269 MY_SYSLOG( LOG_ALERT, DP_ALERT_TEXT __VA_ARGS__);\
00270 } \
00271 }while(0)
00272
00273 #define LM_CRIT( ...) \
00274 do { \
00275 if (is_printable(L_CRIT)){ \
00276 if (log_stderr)\
00277 MY_DPRINT( DP_CRIT_PREFIX __VA_ARGS__);\
00278 else \
00279 MY_SYSLOG( LOG_CRIT, DP_CRIT_TEXT __VA_ARGS__);\
00280 } \
00281 }while(0)
00282
00283 #define LM_ERR( ...) \
00284 do { \
00285 if (is_printable(L_ERR)){ \
00286 if (log_stderr)\
00287 MY_DPRINT( DP_ERR_PREFIX __VA_ARGS__);\
00288 else \
00289 MY_SYSLOG( LOG_ERR, DP_ERR_TEXT __VA_ARGS__);\
00290 } \
00291 }while(0)
00292
00293 #define LM_WARN( ...) \
00294 do { \
00295 if (is_printable(L_WARN)){ \
00296 if (log_stderr)\
00297 MY_DPRINT( DP_WARN_PREFIX __VA_ARGS__);\
00298 else \
00299 MY_SYSLOG( LOG_WARNING, DP_WARN_TEXT __VA_ARGS__);\
00300 } \
00301 }while(0)
00302
00303 #define LM_NOTICE( ...) \
00304 do { \
00305 if (is_printable(L_NOTICE)){ \
00306 if (log_stderr)\
00307 MY_DPRINT( DP_NOTICE_PREFIX __VA_ARGS__);\
00308 else \
00309 MY_SYSLOG( LOG_NOTICE, DP_NOTICE_TEXT __VA_ARGS__);\
00310 } \
00311 }while(0)
00312
00313 #define LM_INFO( ...) \
00314 do { \
00315 if (is_printable(L_INFO)){ \
00316 if (log_stderr)\
00317 MY_DPRINT( DP_INFO_PREFIX __VA_ARGS__);\
00318 else \
00319 MY_SYSLOG( LOG_INFO, DP_INFO_TEXT __VA_ARGS__);\
00320 } \
00321 }while(0)
00322
00323 #ifdef NO_DEBUG
00324 #define LM_DBG( ...)
00325 #else
00326 #define LM_DBG( ...) \
00327 do { \
00328 if (is_printable(L_DBG)){ \
00329 if (log_stderr)\
00330 MY_DPRINT( DP_DBG_PREFIX __VA_ARGS__);\
00331 else \
00332 MY_SYSLOG( LOG_DEBUG, DP_DBG_TEXT __VA_ARGS__);\
00333 } \
00334 }while(0)
00335 #endif
00336
00337 #else
00338
00339 #define LOG_PREFIX MOD_NAME ":%s: "
00340
00341 #define MY_DPRINT( _prefix, _fmt, args...) \
00342 dprint( _prefix LOG_PREFIX _fmt, dp_time(), \
00343 dp_my_pid(), __DP_FUNC, ## args) \
00344
00345 #define MY_SYSLOG( _log_level, _prefix, _fmt, args...) \
00346 syslog( (_log_level)|log_facility, \
00347 _prefix LOG_PREFIX _fmt, __DP_FUNC, ##args);\
00348
00349 #define LM_GEN1(_lev, args...) \
00350 LM_GEN2( log_facility, _lev, ##args)
00351
00352 #define LM_GEN2( _facility, _lev, fmt, args...) \
00353 do { \
00354 if (is_printable(_lev)){ \
00355 if (log_stderr) dprint ( fmt, ## args); \
00356 else { \
00357 switch(_lev){ \
00358 case L_CRIT: \
00359 syslog(LOG_CRIT|_facility, fmt, ##args); \
00360 break; \
00361 case L_ALERT: \
00362 syslog(LOG_ALERT|_facility, fmt, ##args); \
00363 break; \
00364 case L_ERR: \
00365 syslog(LOG_ERR|_facility, fmt, ##args); \
00366 break; \
00367 case L_WARN: \
00368 syslog(LOG_WARNING|_facility, fmt, ##args);\
00369 break; \
00370 case L_NOTICE: \
00371 syslog(LOG_NOTICE|_facility, fmt, ##args); \
00372 break; \
00373 case L_INFO: \
00374 syslog(LOG_INFO|_facility, fmt, ##args); \
00375 break; \
00376 case L_DBG: \
00377 syslog(LOG_DEBUG|_facility, fmt, ##args); \
00378 break; \
00379 } \
00380 } \
00381 } \
00382 }while(0)
00383
00384 #define LM_ALERT( fmt, args...) \
00385 do { \
00386 if (is_printable(L_ALERT)){ \
00387 if (log_stderr)\
00388 MY_DPRINT( DP_ALERT_PREFIX, fmt, ##args);\
00389 else \
00390 MY_SYSLOG( LOG_ALERT, DP_ALERT_TEXT, fmt, ##args);\
00391 } \
00392 }while(0)
00393
00394 #define LM_CRIT( fmt, args...) \
00395 do { \
00396 if (is_printable(L_CRIT)){ \
00397 if (log_stderr)\
00398 MY_DPRINT( DP_CRIT_PREFIX, fmt, ##args);\
00399 else \
00400 MY_SYSLOG( LOG_CRIT, DP_CRIT_TEXT, fmt, ##args);\
00401 } \
00402 }while(0)
00403
00404 #define LM_ERR( fmt, args...) \
00405 do { \
00406 if (is_printable(L_ERR)){ \
00407 if (log_stderr)\
00408 MY_DPRINT( DP_ERR_PREFIX, fmt, ##args);\
00409 else \
00410 MY_SYSLOG( LOG_ERR, DP_ERR_TEXT, fmt, ##args);\
00411 } \
00412 }while(0)
00413
00414 #define LM_WARN( fmt, args...) \
00415 do { \
00416 if (is_printable(L_WARN)){ \
00417 if (log_stderr)\
00418 MY_DPRINT( DP_WARN_PREFIX, fmt, ##args);\
00419 else \
00420 MY_SYSLOG( LOG_WARNING, DP_WARN_TEXT, fmt, ##args);\
00421 } \
00422 }while(0)
00423
00424 #define LM_NOTICE( fmt, args...) \
00425 do { \
00426 if (is_printable(L_NOTICE)){ \
00427 if (log_stderr)\
00428 MY_DPRINT( DP_NOTICE_PREFIX, fmt, ##args);\
00429 else \
00430 MY_SYSLOG( LOG_NOTICE, DP_NOTICE_TEXT, fmt, ##args);\
00431 } \
00432 }while(0)
00433
00434 #define LM_INFO( fmt, args...) \
00435 do { \
00436 if (is_printable(L_INFO)){ \
00437 if (log_stderr)\
00438 MY_DPRINT( DP_INFO_PREFIX, fmt, ##args);\
00439 else \
00440 MY_SYSLOG( LOG_INFO, DP_INFO_TEXT, fmt, ##args);\
00441 } \
00442 }while(0)
00443
00444 #ifdef NO_DEBUG
00445 #define LM_DBG( fmt, args...)
00446 #else
00447 #define LM_DBG( fmt, args...) \
00448 do { \
00449 if (is_printable(L_DBG)){ \
00450 if (log_stderr)\
00451 MY_DPRINT( DP_DBG_PREFIX, fmt, ##args);\
00452 else \
00453 MY_SYSLOG( LOG_DEBUG, DP_DBG_TEXT, fmt, ##args);\
00454 } \
00455 }while(0)
00456 #endif
00457 #endif
00458 #endif
00459
00460
00461 #endif