nginx/src/core/ngx_log.h


/*
 * Copyright (C) Igor Sysoev
 * Copyright (C) Nginx, Inc.
 */


#ifndef _NGX_LOG_H_INCLUDED_
#define _NGX_LOG_H_INCLUDED_


#include <ngx_config.h>
#include <ngx_core.h>


#define NGX_LOG_STDERR
#define NGX_LOG_EMERG
#define NGX_LOG_ALERT
#define NGX_LOG_CRIT
#define NGX_LOG_ERR
#define NGX_LOG_WARN
#define NGX_LOG_NOTICE
#define NGX_LOG_INFO
#define NGX_LOG_DEBUG

#define NGX_LOG_DEBUG_CORE
#define NGX_LOG_DEBUG_ALLOC
#define NGX_LOG_DEBUG_MUTEX
#define NGX_LOG_DEBUG_EVENT
#define NGX_LOG_DEBUG_HTTP
#define NGX_LOG_DEBUG_MAIL
#define NGX_LOG_DEBUG_STREAM

/*
 * do not forget to update debug_levels[] in src/core/ngx_log.c
 * after the adding a new debug level
 */

#define NGX_LOG_DEBUG_FIRST
#define NGX_LOG_DEBUG_LAST
#define NGX_LOG_DEBUG_CONNECTION
#define NGX_LOG_DEBUG_ALL


ngx_log_handler_pt;
ngx_log_writer_pt;


struct ngx_log_s {};


#define NGX_MAX_ERROR_STR


/*********************************/

#if (NGX_HAVE_C99_VARIADIC_MACROS)

#define NGX_HAVE_VARIADIC_MACROS

#define ngx_log_error(level, log, ...)

void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
    const char *fmt, ...);

#define ngx_log_debug(level, log, ...)

/*********************************/

#elif (NGX_HAVE_GCC_VARIADIC_MACROS)

#define NGX_HAVE_VARIADIC_MACROS

#define ngx_log_error

void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
    const char *fmt, ...);

#define ngx_log_debug

/*********************************/

#else /* no variadic macros */

#define NGX_HAVE_VARIADIC_MACROS

void ngx_cdecl ngx_log_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
    const char *fmt, ...);
void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
    const char *fmt, va_list args);
void ngx_cdecl ngx_log_debug_core(ngx_log_t *log, ngx_err_t err,
    const char *fmt, ...);


#endif /* variadic macros */


/*********************************/

#if (NGX_DEBUG)

#if (NGX_HAVE_VARIADIC_MACROS)

#define ngx_log_debug0

#define ngx_log_debug1

#define ngx_log_debug2

#define ngx_log_debug3

#define ngx_log_debug4

#define ngx_log_debug5

#define ngx_log_debug6

#define ngx_log_debug7

#define ngx_log_debug8


#else /* no variadic macros */

#define ngx_log_debug0

#define ngx_log_debug1

#define ngx_log_debug2

#define ngx_log_debug3

#define ngx_log_debug4

#define ngx_log_debug5

#define ngx_log_debug6

#define ngx_log_debug7

#define ngx_log_debug8

#endif

#else /* !NGX_DEBUG */

#define ngx_log_debug0(level, log, err, fmt)
#define ngx_log_debug1(level, log, err, fmt, arg1)
#define ngx_log_debug2(level, log, err, fmt, arg1, arg2)
#define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3)
#define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4)
#define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5)
#define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
#define ngx_log_debug7(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5,    \
                       arg6, arg7)
#define ngx_log_debug8(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5,    \
                       arg6, arg7, arg8)

#endif

/*********************************/

ngx_log_t *ngx_log_init(u_char *prefix, u_char *error_log);
void ngx_cdecl ngx_log_abort(ngx_err_t err, const char *fmt, ...);
void ngx_cdecl ngx_log_stderr(ngx_err_t err, const char *fmt, ...);
u_char *ngx_log_errno(u_char *buf, u_char *last, ngx_err_t err);
ngx_int_t ngx_log_open_default(ngx_cycle_t *cycle);
ngx_int_t ngx_log_redirect_stderr(ngx_cycle_t *cycle);
ngx_log_t *ngx_log_get_file_log(ngx_log_t *head);
char *ngx_log_set_log(ngx_conf_t *cf, ngx_log_t **head);


/*
 * ngx_write_stderr() cannot be implemented as macro, since
 * MSVC does not allow to use #ifdef inside macro parameters.
 *
 * ngx_write_fd() is used instead of ngx_write_console(), since
 * CharToOemBuff() inside ngx_write_console() cannot be used with
 * read only buffer as destination and CharToOemBuff() is not needed
 * for ngx_write_stderr() anyway.
 */
static ngx_inline void
ngx_write_stderr(char *text)
{}


static ngx_inline void
ngx_write_stdout(char *text)
{}


extern ngx_module_t  ngx_errlog_module;
extern ngx_uint_t    ngx_use_stderr;


#endif /* _NGX_LOG_H_INCLUDED_ */