| /* |
| * This file is part of the zlog Library. |
| * |
| * Copyright (C) 2011 by Hardy Simpson <HardySimpson1984@gmail.com> |
| * |
| * Licensed under the LGPL v2.1, see the file COPYING in base directory. |
| */ |
| |
| #ifndef __zlog_h |
| #define __zlog_h |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <stdarg.h> /* for va_list */ |
| #include <stdio.h> /* for size_t */ |
| |
| # if defined __GNUC__ |
| # define ZLOG_CHECK_PRINTF(m,n) __attribute__((format(printf,m,n))) |
| # else |
| # define ZLOG_CHECK_PRINTF(m,n) |
| # endif |
| |
| typedef struct zlog_category_s zlog_category_t; |
| |
| int zlog_init(const char *confpath); |
| int zlog_reload(const char *confpath); |
| void zlog_fini(void); |
| |
| void zlog_profile(void); |
| |
| zlog_category_t *zlog_get_category(const char *cname); |
| |
| int zlog_put_mdc(const char *key, const char *value); |
| char *zlog_get_mdc(const char *key); |
| void zlog_remove_mdc(const char *key); |
| void zlog_clean_mdc(void); |
| |
| void zlog(zlog_category_t * category, |
| const char *file, size_t filelen, |
| const char *func, size_t funclen, |
| long line, int level, |
| const char *format, ...) ZLOG_CHECK_PRINTF(8,9); |
| void vzlog(zlog_category_t * category, |
| const char *file, size_t filelen, |
| const char *func, size_t funclen, |
| long line, int level, |
| const char *format, va_list args); |
| void hzlog(zlog_category_t * category, |
| const char *file, size_t filelen, |
| const char *func, size_t funclen, |
| long line, int level, |
| const void *buf, size_t buflen); |
| |
| int dzlog_init(const char *confpath, const char *cname); |
| int dzlog_set_category(const char *cname); |
| |
| void dzlog(const char *file, size_t filelen, |
| const char *func, size_t funclen, |
| long line, int level, |
| const char *format, ...) ZLOG_CHECK_PRINTF(7,8); |
| void vdzlog(const char *file, size_t filelen, |
| const char *func, size_t funclen, |
| long line, int level, |
| const char *format, va_list args); |
| void hdzlog(const char *file, size_t filelen, |
| const char *func, size_t funclen, |
| long line, int level, |
| const void *buf, size_t buflen); |
| |
| typedef struct zlog_msg_s { |
| char *buf; |
| size_t len; |
| char *path; |
| } zlog_msg_t; |
| |
| typedef int (*zlog_record_fn)(zlog_msg_t *msg); |
| int zlog_set_record(const char *rname, zlog_record_fn record); |
| |
| /******* useful macros, can be redefined at user's h file **********/ |
| |
| typedef enum { |
| ZLOG_LEVEL_DEBUG = 20, |
| ZLOG_LEVEL_INFO = 40, |
| ZLOG_LEVEL_NOTICE = 60, |
| ZLOG_LEVEL_WARN = 80, |
| ZLOG_LEVEL_ERROR = 100, |
| ZLOG_LEVEL_FATAL = 120 |
| } zlog_level; |
| |
| #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L |
| # if defined __GNUC__ && __GNUC__ >= 2 |
| # define __func__ __FUNCTION__ |
| # else |
| # define __func__ "<unknown>" |
| # endif |
| #endif |
| |
| #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L |
| /* zlog macros */ |
| #define zlog_fatal(cat, ...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_FATAL, __VA_ARGS__) |
| #define zlog_error(cat, ...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_ERROR, __VA_ARGS__) |
| #define zlog_warn(cat, ...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_WARN, __VA_ARGS__) |
| #define zlog_notice(cat, ...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_NOTICE, __VA_ARGS__) |
| #define zlog_info(cat, ...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_INFO, __VA_ARGS__) |
| #define zlog_debug(cat, ...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_DEBUG, __VA_ARGS__) |
| /* dzlog macros */ |
| #define dzlog_fatal(...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_FATAL, __VA_ARGS__) |
| #define dzlog_error(...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_ERROR, __VA_ARGS__) |
| #define dzlog_warn(...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_WARN, __VA_ARGS__) |
| #define dzlog_notice(...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_NOTICE, __VA_ARGS__) |
| #define dzlog_info(...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_INFO, __VA_ARGS__) |
| #define dzlog_debug(...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_DEBUG, __VA_ARGS__) |
| #elif defined __GNUC__ |
| /* zlog macros */ |
| #define zlog_fatal(cat, format, args...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_FATAL, format, ##args) |
| #define zlog_error(cat, format, args...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_ERROR, format, ##args) |
| #define zlog_warn(cat, format, args...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_WARN, format, ##args) |
| #define zlog_notice(cat, format, args...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_NOTICE, format, ##args) |
| #define zlog_info(cat, format, args...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_INFO, format, ##args) |
| #define zlog_debug(cat, format, args...) \ |
| zlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_DEBUG, format, ##args) |
| /* dzlog macros */ |
| #define dzlog_fatal(format, args...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_FATAL, format, ##args) |
| #define dzlog_error(format, args...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_ERROR, format, ##args) |
| #define dzlog_warn(format, args...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_WARN, format, ##args) |
| #define dzlog_notice(format, args...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_NOTICE, format, ##args) |
| #define dzlog_info(format, args...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_INFO, format, ##args) |
| #define dzlog_debug(format, args...) \ |
| dzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_DEBUG, format, ##args) |
| #endif |
| |
| /* vzlog macros */ |
| #define vzlog_fatal(cat, format, args) \ |
| vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_FATAL, format, args) |
| #define vzlog_error(cat, format, args) \ |
| vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_ERROR, format, args) |
| #define vzlog_warn(cat, format, args) \ |
| vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_WARN, format, args) |
| #define vzlog_notice(cat, format, args) \ |
| vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_NOTICE, format, args) |
| #define vzlog_info(cat, format, args) \ |
| vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_INFO, format, args) |
| #define vzlog_debug(cat, format, args) \ |
| vzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_DEBUG, format, args) |
| |
| /* hzlog macros */ |
| #define hzlog_fatal(cat, buf, buf_len) \ |
| hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_FATAL, buf, buf_len) |
| #define hzlog_error(cat, buf, buf_len) \ |
| hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_ERROR, buf, buf_len) |
| #define hzlog_warn(cat, buf, buf_len) \ |
| hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_WARN, buf, buf_len) |
| #define hzlog_notice(cat, buf, buf_len) \ |
| hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_NOTICE, buf, buf_len) |
| #define hzlog_info(cat, buf, buf_len) \ |
| hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_INFO, buf, buf_len) |
| #define hzlog_debug(cat, buf, buf_len) \ |
| hzlog(cat, __FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_DEBUG, buf, buf_len) |
| |
| |
| /* vdzlog macros */ |
| #define vdzlog_fatal(format, args) \ |
| vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_FATAL, format, args) |
| #define vdzlog_error(format, args) \ |
| vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_ERROR, format, args) |
| #define vdzlog_warn(format, args) \ |
| vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_WARN, format, args) |
| #define vdzlog_notice(format, args) \ |
| vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_NOTICE, format, args) |
| #define vdzlog_info(format, args) \ |
| vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_INFO, format, args) |
| #define vdzlog_debug(format, args) \ |
| vdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_DEBUG, format, args) |
| |
| /* hdzlog macros */ |
| #define hdzlog_fatal(buf, buf_len) \ |
| hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_FATAL, buf, buf_len) |
| #define hdzlog_error(buf, buf_len) \ |
| hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_ERROR, buf, buf_len) |
| #define hdzlog_warn(buf, buf_len) \ |
| hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_WARN, buf, buf_len) |
| #define hdzlog_notice(buf, buf_len) \ |
| hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_NOTICE, buf, buf_len) |
| #define hdzlog_info(buf, buf_len) \ |
| hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_INFO, buf, buf_len) |
| #define hdzlog_debug(buf, buf_len) \ |
| hdzlog(__FILE__, sizeof(__FILE__)-1, __func__, sizeof(__func__)-1, __LINE__, \ |
| ZLOG_LEVEL_DEBUG, buf, buf_len) |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |