# category.h

Go to the documentation of this file.

    00001 /* $Id$
    00002  *
    00003  * category.h
    00004  *
    00005  * Copyright 2001-2003, Meiosys (www.meiosys.com). All rights reserved.
    00006  *
    00007  * See the COPYING file for the terms of usage and distribution.
    00008  */
    00009
    00010 #ifndef log4c_category_h
    00011 #define log4c_category_h
    00012
    00023 #include <stdio.h>
    00024 #include <stdarg.h>
    00025 #include <log4c/defs.h>
    00026 #include <log4c/priority.h>
    00027 #include <log4c/location_info.h>
    00028
    00029 __LOG4C_BEGIN_DECLS
    00030
    00031 struct __log4c_appender;
    00032 struct __log4c_category;
    00033
    00037 typedef struct __log4c_category log4c_category_t;
    00038
    00046 LOG4C_API log4c_category_t* log4c_category_get(const char* a_name);
    00047
    00057 LOG4C_API int log4c_category_list(log4c_category_t** a_cats, int a_ncats);
    00058
    00068 LOG4C_API log4c_category_t* log4c_category_new(const char* a_name);
    00069
    00075 LOG4C_API void log4c_category_delete(log4c_category_t* a_category);
    00076
    00082 LOG4C_API const char* log4c_category_get_name(const log4c_category_t* a_category);
    00083
    00090 LOG4C_API const struct __log4c_appender* log4c_category_get_appender(
    00091     const log4c_category_t* a_category);
    00092
    00099 LOG4C_API int log4c_category_get_additivity(const log4c_category_t* a_category);
    00100
    00106 LOG4C_API int log4c_category_get_priority(const log4c_category_t* a_category);
    00107
    00119 LOG4C_API int log4c_category_get_chainedpriority(const log4c_category_t* a_category);
    00120
    00128 LOG4C_API const struct __log4c_appender* log4c_category_set_appender(
    00129     log4c_category_t* a_category,
    00130     struct __log4c_appender* a_appender);
    00139 LOG4C_API int log4c_category_set_priority(log4c_category_t* a_category,
    00140                                        int a_priority);
    00141
    00149 LOG4C_API int log4c_category_set_additivity(log4c_category_t* a_category,
    00150                                          int a_additivity);
    00157 LOG4C_API void log4c_category_print(const log4c_category_t* a_category, FILE* a_stream);
    00158
    00166 #if !defined(_WIN32) && !defined(__HP_cc)
    00167 static inline int log4c_category_is_priority_enabled(const log4c_category_t* a_category,
    00168                                                      int a_priority)
    00169 {
    00170     return log4c_category_get_chainedpriority(a_category) >= a_priority;
    00171 }
    00172 #else
    00173 #define log4c_category_is_priority_enabled(a,b) \
    00174   (log4c_category_get_chainedpriority(a) >= b)
    00175 #endif
    00176
    00184 #if !defined(_WIN32) && !defined(__HP_cc)
    00185 static inline int log4c_category_is_fatal_enabled(const log4c_category_t* a_category)
    00186 {
    00187   return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_FATAL);
    00188 }
    00189 #else
    00190 #define log4c_category_is_fatal_enabled(a)  \
    00191   (log4c_category_is_priority_enabled(a,LOG4C_PRIORITY_FATAL))
    00192 #endif
    00193
    00201 #if !defined(_WIN32) && !defined(__HP_cc)
    00202 static inline int log4c_category_is_alert_enabled(const log4c_category_t* a_category)
    00203 {
    00204     return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_ALERT);
    00205 }
    00206 #else
    00207 #define log4c_category_is_alert_enabled(a) \
    00208   (log4c_category_is_priority_enabled(a,LOG4C_PRIORITY_ALERT))
    00209 #endif
    00210
    00218 #if !defined(_WIN32) && !defined(__HP_cc)
    00219 static inline int log4c_category_is_crit_enabled(const log4c_category_t* a_category)
    00220 {
    00221     return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_CRIT);
    00222 }
    00223 #else
    00224 #define log4c_category_is_crit_enabled(a) \
    00225   (log4c_category_is_priority_enabled(a, LOG4C_PRIORITY_CRIT))
    00226 #endif
    00227
    00235 #if !defined(_WIN32) && !defined(__HP_cc)
    00236 static inline int log4c_category_is_error_enabled(const log4c_category_t* a_category)
    00237 {
    00238     return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_ERROR);
    00239 }
    00240 #else
    00241 #define log4c_category_is_error_enabled(a) \
    00242   (log4c_category_is_priority_enabled(a, LOG4C_PRIORITY_ERROR))
    00243 #endif
    00244
    00252 #if !defined(_WIN32) && !defined(__HP_cc)
    00253 static inline int log4c_category_is_warn_enabled(const log4c_category_t* a_category)
    00254 {
    00255     return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_WARN);
    00256 }
    00257 #else
    00258 #define log4c_category_is_warn_enabled(a) \
    00259   log4c_category_is_warn_enabled(a) \
    00260     (log4c_category_is_priority_enabled(a, LOG4C_PRIORITY_WARN))
    00261 #endif
    00262
    00270 #if !defined(_WIN32) && !defined(__HP_cc)
    00271 static inline int log4c_category_is_notice_enabled(const log4c_category_t* a_category)
    00272 {
    00273     return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_NOTICE);
    00274 }
    00275 #else
    00276 #define log4c_category_is_notice_enabled(a) \
    00277   (log4c_category_is_priority_enabled(a, LOG4C_PRIORITY_NOTICE))
    00278 #endif
    00279
    00287 #if !defined(_WIN32) && !defined(__HP_cc)
    00288 static inline int log4c_category_is_info_enabled(const log4c_category_t* a_category)
    00289 {
    00290     return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_INFO);
    00291 }
    00292 #else
    00293 #define log4c_category_is_info_enabled(a) \
    00294   (log4c_category_is_priority_enabled(a, LOG4C_PRIORITY_INFO))
    00295 #endif
    00296
    00304 #if !defined(_WIN32) && !defined(__HP_cc)
    00305 static inline int log4c_category_is_debug_enabled(const log4c_category_t* a_category)
    00306 {
    00307     return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_DEBUG);
    00308 }
    00309 #else
    00310 #define log4c_category_is_debug_enabled(a) \
    00311   (log4c_category_is_priority_enabled(a, LOG4C_PRIORITY_DEBUG))
    00312 #endif
    00313
    00321 #if !defined(_WIN32) && !defined(__HP_cc)
    00322 static inline int log4c_category_is_trace_enabled(const log4c_category_t* a_category)
    00323 {
    00324     return log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_TRACE);
    00325 }
    00326 #else
    00327 #define log4c_category_is_trace_enabled(a) \
    00328   (log4c_category_is_priority_enabled(a, LOG4C_PRIORITY_TRACE))
    00329 #endif
    00330
    00334 LOG4C_API void __log4c_category_vlog(const log4c_category_t* a_category,
    00335                                   const log4c_location_info_t* a_locinfo,
    00336                                   int a_priority,
    00337                                   const char* a_format,
    00338                                   va_list a_args);
    00339
    00347 /* msvc doesn't allow "inline" nor variable args in a macro
    00348  * so cannot #define these ones.
    00349  */
    00350
    00351 static LOG4C_INLINE void log4c_category_vlog(const log4c_category_t* a_category,
    00352                                        int a_priority,
    00353                                        const char* a_format,
    00354                                        va_list a_args)
    00355 {
    00356     const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL);
    00357
    00358     __log4c_category_vlog(a_category, &locinfo, a_priority, a_format, a_args);
    00359 }
    00360
    00369 static LOG4C_INLINE void log4c_category_log(const log4c_category_t* a_category,
    00370                                       int a_priority,
    00371                                       const char* a_format,
    00372                                       ...)
    00373 {
    00374     if (log4c_category_is_priority_enabled(a_category, a_priority)) {
    00375         va_list va;
    00376         va_start(va, a_format);
    00377         log4c_category_vlog(a_category, a_priority, a_format, va);
    00378         va_end(va);
    00379     }
    00380 }
    00381
    00391 static LOG4C_INLINE void log4c_category_log_locinfo(
    00392     const log4c_category_t* a_category,
    00393     const log4c_location_info_t* a_locinfo,
    00394     int a_priority,
    00395     const char* a_format,
    00396     ...)
    00397 {
    00398     if (log4c_category_is_priority_enabled(a_category, a_priority)) {
    00399         va_list va;
    00400         va_start(va, a_format);
    00401         __log4c_category_vlog(a_category, a_locinfo, a_priority, a_format, va);
    00402         va_end(va);
    00403     }
    00404 }
    00405
    00413 static LOG4C_INLINE void log4c_category_fatal(const log4c_category_t* a_category,
    00414                                         const char* a_format,
    00415                                         ...)
    00416 {
    00417     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_FATAL)) {
    00418         va_list va;
    00419         va_start(va, a_format);
    00420         log4c_category_vlog(a_category, LOG4C_PRIORITY_FATAL, a_format, va);
    00421         va_end(va);
    00422     }
    00423 }
    00424
    00432 static LOG4C_INLINE void log4c_category_alert(const log4c_category_t* a_category,
    00433                                         const char* a_format,
    00434                                         ...)
    00435 {
    00436     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_ALERT)) {
    00437         va_list va;
    00438         va_start(va, a_format);
    00439         log4c_category_vlog(a_category, LOG4C_PRIORITY_ALERT, a_format, va);
    00440         va_end(va);
    00441     }
    00442 }
    00443
    00451 static LOG4C_INLINE void log4c_category_crit(const log4c_category_t* a_category,
    00452                                        const char* a_format,
    00453                                        ...)
    00454 {
    00455     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_CRIT)) {
    00456         va_list va;
    00457         va_start(va, a_format);
    00458         log4c_category_vlog(a_category, LOG4C_PRIORITY_CRIT, a_format, va);
    00459         va_end(va);
    00460     }
    00461 }
    00462
    00470 static LOG4C_INLINE void log4c_category_error(const log4c_category_t* a_category,
    00471                                         const char* a_format,
    00472                                         ...)
    00473 {
    00474     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_ERROR)) {
    00475         va_list va;
    00476         va_start(va, a_format);
    00477         log4c_category_vlog(a_category, LOG4C_PRIORITY_ERROR, a_format, va);
    00478         va_end(va);
    00479     }
    00480 }
    00481
    00489 static LOG4C_INLINE void log4c_category_warn(const log4c_category_t* a_category,
    00490                                        const char* a_format,
    00491                                        ...)
    00492 {
    00493     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_WARN)) {
    00494         va_list va;
    00495         va_start(va, a_format);
    00496         log4c_category_vlog(a_category, LOG4C_PRIORITY_WARN, a_format, va);
    00497         va_end(va);
    00498     }
    00499 }
    00500
    00508 static LOG4C_INLINE void log4c_category_notice(const log4c_category_t* a_category,
    00509                                          const char* a_format,
    00510                                          ...)
    00511 {
    00512     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_NOTICE)) {
    00513         va_list va;
    00514         va_start(va, a_format);
    00515         log4c_category_vlog(a_category, LOG4C_PRIORITY_NOTICE, a_format, va);
    00516         va_end(va);
    00517     }
    00518 }
    00519
    00527 static LOG4C_INLINE void log4c_category_info(const log4c_category_t* a_category,
    00528                                        const char* a_format,
    00529                                        ...)
    00530 {
    00531     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_INFO)) {
    00532         va_list va;
    00533         va_start(va, a_format);
    00534         log4c_category_vlog(a_category, LOG4C_PRIORITY_INFO, a_format, va);
    00535         va_end(va);
    00536     }
    00537 }
    00538
    00546 static LOG4C_INLINE void log4c_category_debug(const log4c_category_t* a_category,
    00547                                         const char* a_format,
    00548                                         ...)
    00549 {
    00550     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_DEBUG)) {
    00551         va_list va;
    00552         va_start(va, a_format);
    00553         log4c_category_vlog(a_category, LOG4C_PRIORITY_DEBUG, a_format, va);
    00554         va_end(va);
    00555     }
    00556 }
    00557
    00565 static LOG4C_INLINE void __log4c_category_trace(const log4c_category_t* a_category,
    00566                                           const char* a_format,
    00567                                           ...)
    00568 {
    00569     if (log4c_category_is_priority_enabled(a_category, LOG4C_PRIORITY_TRACE)) {
    00570         va_list va;
    00571         va_start(va, a_format);
    00572         log4c_category_vlog(a_category, LOG4C_PRIORITY_TRACE, a_format, va);
    00573         va_end(va);
    00574     }
    00575 }
    00576
    00577 #ifdef __GNUC__
    00578
    00579 #ifdef OLD_VARIADIC_MACRO
    00580
    00581 #  define log4c_category_trace(a_category, a_format, args...) \
    00582     __log4c_category_trace(a_category, log4c_location "\n" a_format, ##args )
    00583
    00584 #else
    00585
    00586 #  define log4c_category_trace(a_category, a_format, ...) \
    00587     __log4c_category_trace(a_category, log4c_location "\n" a_format, ##__VA_ARGS__ )
    00588
    00589 #endif /* OLD_VARIADIC_MACRO */
    00590
    00591
    00592 #else
    00593 #  define log4c_category_trace __log4c_category_trace
    00594 #endif  /* __GNUC__ */
    00595
    00602 #ifdef __GNUC__
    00603 #   define log4c_category_define(a_category, a_name) \
    00604     typedef log4c_category_t log4c_category_define_##a_category __attribute__((deprecated)); \
    00605     static log4c_category_define_##a_category* a_category  __attribute__ ((unused)) = NULL;
    00606 #else
    00607 #   define log4c_category_define(a_category, a_name)
    00608 #endif
    00609
    00613 struct __sd_factory;
    00614 LOG4C_API struct __sd_factory* log4c_category_factory;
    00615
    00616 __LOG4C_END_DECLS
    00617
    00618 #endif