blob: 59ca1f9c471c0e79a8f7f654cf10c4d3e291fdf2 [file] [log] [blame]
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00001#ifndef _NGX_LOG_H_INCLUDED_
2#define _NGX_LOG_H_INCLUDED_
3
4
Igor Sysoev1c104622003-06-03 15:42:58 +00005#include <ngx_config.h>
6#include <ngx_core.h>
7
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00008
Igor Sysoev865c1502003-11-30 20:03:18 +00009#define NGX_LOG_STDERR 0
10#define NGX_LOG_EMERG 1
11#define NGX_LOG_ALERT 2
12#define NGX_LOG_CRIT 3
13#define NGX_LOG_ERR 4
14#define NGX_LOG_WARN 5
15#define NGX_LOG_NOTICE 6
16#define NGX_LOG_INFO 7
17#define NGX_LOG_DEBUG 8
18
19#define NGX_LOG_DEBUG_HTTP 0x80
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000020
Igor Sysoev1c13c662003-05-20 15:37:55 +000021
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000022/*
Igor Sysoev2b542382002-08-20 14:48:28 +000023 "[%time] [%level] %pid#%tid: %message:(%errno)%errstr, while %action"
Igor Sysoev4e5e1172002-08-22 15:24:03 +000024 " %peer and while processing %context"
Igor Sysoev2b542382002-08-20 14:48:28 +000025
Igor Sysoev4e5e1172002-08-22 15:24:03 +000026 ----
Igor Sysoev2b542382002-08-20 14:48:28 +000027 message = "recv() failed";
28 errno = 32;
29 action = "reading request headers from client";
30 peer = "192.168.1.1";
31 context = "URL /"
32
Igor Sysoev4e5e1172002-08-22 15:24:03 +000033 "[2002/08/20 12:00:00] [error] 412#3: recv() failed (32: Broken pipe)"
Igor Sysoev2b542382002-08-20 14:48:28 +000034 " while reading request headers from client 192.168.1.1"
Igor Sysoev4e5e1172002-08-22 15:24:03 +000035 " and while processing URL /"
36
37 ----
38 message = "recv() failed";
39 errno = 32;
40 ngx_http_proxy_error_context_t:
41 action = "reading headers from server %s for client %s and "
42 "while processing %s"
43 backend = "127.0.0.1";
44 peer = "192.168.1.1";
45 context = "URL /"
46
47 "[2002/08/20 12:00:00] [error] 412#3: recv() failed (32: Broken pipe)"
48 " while reading headers from backend 127.0.0.1"
49 " for client 192.168.1.1 and while processing URL /"
50
51 ----
52 "[alert] 412#3: ngx_alloc: malloc() 102400 bytes failed (12: Cannot "
53 "allocate memory) while reading request headers from client 192.168.1.1"
54 " and while processing URL /"
Igor Sysoev2b542382002-08-20 14:48:28 +000055
56
57 OLD:
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000058 "... while ", action = "reading client request headers"
59 "... while reading client request headers"
60 "... while ", action = "reading client request headers"
61 context: pop3 user account
62 "... while reading client command for 'john_doe'"
63*/
64
Igor Sysoev1c13c662003-05-20 15:37:55 +000065
Igor Sysoev10fc9ef2003-10-27 08:53:49 +000066typedef size_t (*ngx_log_handler_pt) (void *ctx, char *buf, size_t len);
67
68
Igor Sysoev160d7742003-11-19 16:26:41 +000069struct ngx_log_s {
Igor Sysoev10fc9ef2003-10-27 08:53:49 +000070 int log_level;
71 ngx_open_file_t *file;
72 void *data;
73 ngx_log_handler_pt handler;
Igor Sysoev160d7742003-11-19 16:26:41 +000074};
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000075
76#define MAX_ERROR_STR 2048
77
78#define _ ,
79
80
Igor Sysoev865c1502003-11-30 20:03:18 +000081/*********************************/
82
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000083#if (HAVE_GCC_VARIADIC_MACROS)
84
85#define HAVE_VARIADIC_MACROS 1
86
87#define ngx_log_error(level, log, args...) \
88 if (log->log_level >= level) ngx_log_error_core(level, log, args)
89
Igor Sysoev4e5e1172002-08-22 15:24:03 +000090#if (NGX_DEBUG)
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000091#define ngx_log_debug(log, args...) \
Igor Sysoev865c1502003-11-30 20:03:18 +000092 if (log->log_level & NGX_LOG_DEBUG) \
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000093 ngx_log_error_core(NGX_LOG_DEBUG, log, 0, args)
94#else
95#define ngx_log_debug(log, args...)
96#endif
97
98#define ngx_assert(assert, fallback, log, args...) \
99 if (!(assert)) { \
100 if (log->log_level >= NGX_LOG_ALERT) \
101 ngx_log_error_core(NGX_LOG_ALERT, log, 0, args); \
102 fallback; \
103 }
104
105void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
106 const char *fmt, ...);
107
Igor Sysoev865c1502003-11-30 20:03:18 +0000108/*********************************/
Igor Sysoev1c13c662003-05-20 15:37:55 +0000109
Igor Sysoev6de5c2c2002-08-06 16:39:45 +0000110#elif (HAVE_C99_VARIADIC_MACROS)
111
112#define HAVE_VARIADIC_MACROS 1
113
114#define ngx_log_error(level, log, ...) \
115 if (log->log_level >= level) ngx_log_error_core(level, log, __VA_ARGS__)
116
Igor Sysoev4e5e1172002-08-22 15:24:03 +0000117#if (NGX_DEBUG)
Igor Sysoev6de5c2c2002-08-06 16:39:45 +0000118#define ngx_log_debug(log, ...) \
119 if (log->log_level == NGX_LOG_DEBUG) \
120 ngx_log_error_core(NGX_LOG_DEBUG, log, 0, __VA_ARGS__)
121#else
122#define ngx_log_debug(log, ...)
123#endif
124
125#define ngx_assert(assert, fallback, log, ...) \
126 if (!(assert)) { \
127 if (log->log_level >= NGX_LOG_ALERT) \
128 ngx_log_error_core(NGX_LOG_ALERT, log, 0, __VA_ARGS__); \
129 fallback; \
130 }
131
132void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
133 const char *fmt, ...);
134
Igor Sysoev865c1502003-11-30 20:03:18 +0000135/*********************************/
Igor Sysoev1c13c662003-05-20 15:37:55 +0000136
Igor Sysoev6de5c2c2002-08-06 16:39:45 +0000137#else /* NO VARIADIC MACROS */
138
Igor Sysoev865c1502003-11-30 20:03:18 +0000139#define HAVE_VARIADIC_MACROS 0
140
Igor Sysoev4e5e1172002-08-22 15:24:03 +0000141#if (NGX_DEBUG)
Igor Sysoev6de5c2c2002-08-06 16:39:45 +0000142#define ngx_log_debug(log, text) \
143 if (log->log_level == NGX_LOG_DEBUG) \
Igor Sysoev865c1502003-11-30 20:03:18 +0000144 ngx_log_debug_core(log, 0, text)
Igor Sysoev6de5c2c2002-08-06 16:39:45 +0000145#else
146#define ngx_log_debug(log, text)
147#endif
148
149#define ngx_assert(assert, fallback, log, text) \
150 if (!(assert)) { \
151 if (log->log_level >= NGX_LOG_ALERT) \
152 ngx_assert_core(log, text); \
153 fallback; \
154 }
155
156void ngx_log_error(int level, ngx_log_t *log, ngx_err_t err,
157 const char *fmt, ...);
158void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
159 const char *fmt, va_list args);
Igor Sysoev865c1502003-11-30 20:03:18 +0000160void ngx_log_debug_core(ngx_log_t *log, ngx_err_t err, const char *fmt, ...);
Igor Sysoev6de5c2c2002-08-06 16:39:45 +0000161void ngx_assert_core(ngx_log_t *log, const char *fmt, ...);
162
163
164#endif /* VARIADIC MACROS */
165
166
Igor Sysoev865c1502003-11-30 20:03:18 +0000167/*********************************/
168
169#if (HAVE_VARIADIC_MACROS)
170
171#if (NGX_DEBUG)
172#define ngx_log_debug0(level, log, err, fmt) \
173 if (log->log_level & level) \
174 ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt)
175#else
176#define ngx_log_debug0(level, log, err, fmt)
177#endif
178
179#if (NGX_DEBUG)
180#define ngx_log_debug1(level, log, err, fmt, arg1) \
181 if (log->log_level & level) \
182 ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, arg1)
183#else
184#define ngx_log_debug1(level, log, err, fmt, arg1)
185#endif
186
187/*********************************/
188
189#else /* NO VARIADIC MACROS */
190
191#if (NGX_DEBUG)
192#define ngx_log_debug0(level, log, err, fmt) \
193 if (log->log_level & level) \
194 ngx_log_debug_core(log, err, fmt)
195#else
196#define ngx_log_debug0(level, log, err, fmt)
197#endif
198
199#if (NGX_DEBUG)
200#define ngx_log_debug1(level, log, err, fmt, arg1) \
201 if (log->log_level & level) \
202 ngx_log_debug_core(log, err, fmt, arg1)
203#else
204#define ngx_log_debug1(level, log, err, fmt, arg1)
205#endif
206#endif
207
208
209/*********************************/
210
Igor Sysoevbe2cfc32003-06-15 18:32:13 +0000211#define ngx_log_alloc_log(pool, log) ngx_palloc(pool, log, sizeof(ngx_log_t))
212#define ngx_log_copy_log(new, old) ngx_memcpy(new, old, sizeof(ngx_log_t))
213
Igor Sysoev1c104622003-06-03 15:42:58 +0000214ngx_log_t *ngx_log_init_errlog();
Igor Sysoevb8c367c2003-07-10 16:26:57 +0000215ngx_log_t *ngx_log_create_errlog(ngx_cycle_t *cycle, ngx_str_t *name);
Igor Sysoev96c56c92003-07-02 14:41:17 +0000216
Igor Sysoev1c104622003-06-03 15:42:58 +0000217
218extern ngx_module_t ngx_errlog_module;
219
220
Igor Sysoev6de5c2c2002-08-06 16:39:45 +0000221#endif /* _NGX_LOG_H_INCLUDED_ */