Annotation of embedaddon/nginx/src/core/ngx_log.h, revision 1.1
1.1 ! misho 1:
! 2: /*
! 3: * Copyright (C) Igor Sysoev
! 4: * Copyright (C) Nginx, Inc.
! 5: */
! 6:
! 7:
! 8: #ifndef _NGX_LOG_H_INCLUDED_
! 9: #define _NGX_LOG_H_INCLUDED_
! 10:
! 11:
! 12: #include <ngx_config.h>
! 13: #include <ngx_core.h>
! 14:
! 15:
! 16: #define NGX_LOG_STDERR 0
! 17: #define NGX_LOG_EMERG 1
! 18: #define NGX_LOG_ALERT 2
! 19: #define NGX_LOG_CRIT 3
! 20: #define NGX_LOG_ERR 4
! 21: #define NGX_LOG_WARN 5
! 22: #define NGX_LOG_NOTICE 6
! 23: #define NGX_LOG_INFO 7
! 24: #define NGX_LOG_DEBUG 8
! 25:
! 26: #define NGX_LOG_DEBUG_CORE 0x010
! 27: #define NGX_LOG_DEBUG_ALLOC 0x020
! 28: #define NGX_LOG_DEBUG_MUTEX 0x040
! 29: #define NGX_LOG_DEBUG_EVENT 0x080
! 30: #define NGX_LOG_DEBUG_HTTP 0x100
! 31: #define NGX_LOG_DEBUG_MAIL 0x200
! 32: #define NGX_LOG_DEBUG_MYSQL 0x400
! 33:
! 34: /*
! 35: * do not forget to update debug_levels[] in src/core/ngx_log.c
! 36: * after the adding a new debug level
! 37: */
! 38:
! 39: #define NGX_LOG_DEBUG_FIRST NGX_LOG_DEBUG_CORE
! 40: #define NGX_LOG_DEBUG_LAST NGX_LOG_DEBUG_MYSQL
! 41: #define NGX_LOG_DEBUG_CONNECTION 0x80000000
! 42: #define NGX_LOG_DEBUG_ALL 0x7ffffff0
! 43:
! 44:
! 45: typedef u_char *(*ngx_log_handler_pt) (ngx_log_t *log, u_char *buf, size_t len);
! 46:
! 47:
! 48: struct ngx_log_s {
! 49: ngx_uint_t log_level;
! 50: ngx_open_file_t *file;
! 51:
! 52: ngx_atomic_uint_t connection;
! 53:
! 54: ngx_log_handler_pt handler;
! 55: void *data;
! 56:
! 57: /*
! 58: * we declare "action" as "char *" because the actions are usually
! 59: * the static strings and in the "u_char *" case we have to override
! 60: * their types all the time
! 61: */
! 62:
! 63: char *action;
! 64: };
! 65:
! 66:
! 67: #define NGX_MAX_ERROR_STR 2048
! 68:
! 69:
! 70: /*********************************/
! 71:
! 72: #if (NGX_HAVE_C99_VARIADIC_MACROS)
! 73:
! 74: #define NGX_HAVE_VARIADIC_MACROS 1
! 75:
! 76: #define ngx_log_error(level, log, ...) \
! 77: if ((log)->log_level >= level) ngx_log_error_core(level, log, __VA_ARGS__)
! 78:
! 79: void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
! 80: const char *fmt, ...);
! 81:
! 82: #define ngx_log_debug(level, log, ...) \
! 83: if ((log)->log_level & level) \
! 84: ngx_log_error_core(NGX_LOG_DEBUG, log, __VA_ARGS__)
! 85:
! 86: /*********************************/
! 87:
! 88: #elif (NGX_HAVE_GCC_VARIADIC_MACROS)
! 89:
! 90: #define NGX_HAVE_VARIADIC_MACROS 1
! 91:
! 92: #define ngx_log_error(level, log, args...) \
! 93: if ((log)->log_level >= level) ngx_log_error_core(level, log, args)
! 94:
! 95: void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
! 96: const char *fmt, ...);
! 97:
! 98: #define ngx_log_debug(level, log, args...) \
! 99: if ((log)->log_level & level) \
! 100: ngx_log_error_core(NGX_LOG_DEBUG, log, args)
! 101:
! 102: /*********************************/
! 103:
! 104: #else /* NO VARIADIC MACROS */
! 105:
! 106: #define NGX_HAVE_VARIADIC_MACROS 0
! 107:
! 108: void ngx_cdecl ngx_log_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
! 109: const char *fmt, ...);
! 110: void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
! 111: const char *fmt, va_list args);
! 112: void ngx_cdecl ngx_log_debug_core(ngx_log_t *log, ngx_err_t err,
! 113: const char *fmt, ...);
! 114:
! 115:
! 116: #endif /* VARIADIC MACROS */
! 117:
! 118:
! 119: /*********************************/
! 120:
! 121: #if (NGX_DEBUG)
! 122:
! 123: #if (NGX_HAVE_VARIADIC_MACROS)
! 124:
! 125: #define ngx_log_debug0(level, log, err, fmt) \
! 126: ngx_log_debug(level, log, err, fmt)
! 127:
! 128: #define ngx_log_debug1(level, log, err, fmt, arg1) \
! 129: ngx_log_debug(level, log, err, fmt, arg1)
! 130:
! 131: #define ngx_log_debug2(level, log, err, fmt, arg1, arg2) \
! 132: ngx_log_debug(level, log, err, fmt, arg1, arg2)
! 133:
! 134: #define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3) \
! 135: ngx_log_debug(level, log, err, fmt, arg1, arg2, arg3)
! 136:
! 137: #define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4) \
! 138: ngx_log_debug(level, log, err, fmt, arg1, arg2, arg3, arg4)
! 139:
! 140: #define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) \
! 141: ngx_log_debug(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5)
! 142:
! 143: #define ngx_log_debug6(level, log, err, fmt, \
! 144: arg1, arg2, arg3, arg4, arg5, arg6) \
! 145: ngx_log_debug(level, log, err, fmt, \
! 146: arg1, arg2, arg3, arg4, arg5, arg6)
! 147:
! 148: #define ngx_log_debug7(level, log, err, fmt, \
! 149: arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
! 150: ngx_log_debug(level, log, err, fmt, \
! 151: arg1, arg2, arg3, arg4, arg5, arg6, arg7)
! 152:
! 153: #define ngx_log_debug8(level, log, err, fmt, \
! 154: arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \
! 155: ngx_log_debug(level, log, err, fmt, \
! 156: arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
! 157:
! 158:
! 159: #else /* NO VARIADIC MACROS */
! 160:
! 161: #define ngx_log_debug0(level, log, err, fmt) \
! 162: if ((log)->log_level & level) \
! 163: ngx_log_debug_core(log, err, fmt)
! 164:
! 165: #define ngx_log_debug1(level, log, err, fmt, arg1) \
! 166: if ((log)->log_level & level) \
! 167: ngx_log_debug_core(log, err, fmt, arg1)
! 168:
! 169: #define ngx_log_debug2(level, log, err, fmt, arg1, arg2) \
! 170: if ((log)->log_level & level) \
! 171: ngx_log_debug_core(log, err, fmt, arg1, arg2)
! 172:
! 173: #define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3) \
! 174: if ((log)->log_level & level) \
! 175: ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3)
! 176:
! 177: #define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4) \
! 178: if ((log)->log_level & level) \
! 179: ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4)
! 180:
! 181: #define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) \
! 182: if ((log)->log_level & level) \
! 183: ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4, arg5)
! 184:
! 185: #define ngx_log_debug6(level, log, err, fmt, \
! 186: arg1, arg2, arg3, arg4, arg5, arg6) \
! 187: if ((log)->log_level & level) \
! 188: ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
! 189:
! 190: #define ngx_log_debug7(level, log, err, fmt, \
! 191: arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
! 192: if ((log)->log_level & level) \
! 193: ngx_log_debug_core(log, err, fmt, \
! 194: arg1, arg2, arg3, arg4, arg5, arg6, arg7)
! 195:
! 196: #define ngx_log_debug8(level, log, err, fmt, \
! 197: arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \
! 198: if ((log)->log_level & level) \
! 199: ngx_log_debug_core(log, err, fmt, \
! 200: arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
! 201:
! 202: #endif
! 203:
! 204: #else /* NO NGX_DEBUG */
! 205:
! 206: #define ngx_log_debug0(level, log, err, fmt)
! 207: #define ngx_log_debug1(level, log, err, fmt, arg1)
! 208: #define ngx_log_debug2(level, log, err, fmt, arg1, arg2)
! 209: #define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3)
! 210: #define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4)
! 211: #define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5)
! 212: #define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
! 213: #define ngx_log_debug7(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, \
! 214: arg6, arg7)
! 215: #define ngx_log_debug8(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, \
! 216: arg6, arg7, arg8)
! 217:
! 218: #endif
! 219:
! 220: /*********************************/
! 221:
! 222: ngx_log_t *ngx_log_init(u_char *prefix);
! 223: ngx_log_t *ngx_log_create(ngx_cycle_t *cycle, ngx_str_t *name);
! 224: char *ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log);
! 225: void ngx_cdecl ngx_log_abort(ngx_err_t err, const char *fmt, ...);
! 226: void ngx_cdecl ngx_log_stderr(ngx_err_t err, const char *fmt, ...);
! 227: u_char *ngx_log_errno(u_char *buf, u_char *last, ngx_err_t err);
! 228:
! 229:
! 230: /*
! 231: * ngx_write_stderr() cannot be implemented as macro, since
! 232: * MSVC does not allow to use #ifdef inside macro parameters.
! 233: *
! 234: * ngx_write_fd() is used instead of ngx_write_console(), since
! 235: * CharToOemBuff() inside ngx_write_console() cannot be used with
! 236: * read only buffer as destination and CharToOemBuff() is not needed
! 237: * for ngx_write_stderr() anyway.
! 238: */
! 239: static ngx_inline void
! 240: ngx_write_stderr(char *text)
! 241: {
! 242: (void) ngx_write_fd(ngx_stderr, text, strlen(text));
! 243: }
! 244:
! 245:
! 246: extern ngx_module_t ngx_errlog_module;
! 247: extern ngx_uint_t ngx_use_stderr;
! 248:
! 249:
! 250: #endif /* _NGX_LOG_H_INCLUDED_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>