Mercurial > hg > nginx-quic
comparison src/core/ngx_log.c @ 100:7ebc8b7fb816
nginx-0.0.1-2003-06-03-19:42:58 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 03 Jun 2003 15:42:58 +0000 |
parents | 738fe44c70d5 |
children | 6dfda4cf5200 |
comparison
equal
deleted
inserted
replaced
99:a059e1aa65d4 | 100:7ebc8b7fb816 |
---|---|
10 "[time as ctime()] [alert] anything" | 10 "[time as ctime()] [alert] anything" |
11 */ | 11 */ |
12 | 12 |
13 #include <ngx_config.h> | 13 #include <ngx_config.h> |
14 #include <ngx_core.h> | 14 #include <ngx_core.h> |
15 | |
16 | |
17 static char *ngx_set_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); | |
18 | |
19 | |
20 static ngx_str_t errlog_name = ngx_string("errlog"); | |
21 | |
22 static ngx_command_t ngx_errlog_commands[] = { | |
23 | |
24 {ngx_string("error_log"), | |
25 NGX_MAIN_CONF|NGX_CONF_TAKE1, | |
26 ngx_set_error_log, | |
27 0, | |
28 0, | |
29 NULL}, | |
30 | |
31 ngx_null_command | |
32 }; | |
33 | |
34 | |
35 ngx_module_t ngx_errlog_module = { | |
36 NGX_MODULE, | |
37 &errlog_name, /* module context */ | |
38 ngx_errlog_commands, /* module directives */ | |
39 NGX_CORE_MODULE, /* module type */ | |
40 NULL /* init module */ | |
41 }; | |
42 | |
43 | |
44 static ngx_log_t ngx_log; | |
15 | 45 |
16 | 46 |
17 static const char *err_levels[] = { | 47 static const char *err_levels[] = { |
18 "stderr", "emerg", "alert", "crit", "error", | 48 "stderr", "emerg", "alert", "crit", "error", |
19 "warn", "notice", "info", "debug" | 49 "warn", "notice", "info", "debug" |
30 char errstr[MAX_ERROR_STR]; | 60 char errstr[MAX_ERROR_STR]; |
31 ngx_tm_t tm; | 61 ngx_tm_t tm; |
32 size_t len; | 62 size_t len; |
33 #if (HAVE_VARIADIC_MACROS) | 63 #if (HAVE_VARIADIC_MACROS) |
34 va_list args; | 64 va_list args; |
65 #endif | |
66 #if (WIN32) | |
67 int written; | |
35 #endif | 68 #endif |
36 | 69 |
37 ngx_localtime(&tm); | 70 ngx_localtime(&tm); |
38 len = ngx_snprintf(errstr, sizeof(errstr), "%4d/%02d/%02d %02d:%02d:%02d", | 71 len = ngx_snprintf(errstr, sizeof(errstr), "%4d/%02d/%02d %02d:%02d:%02d", |
39 tm.ngx_tm_year, tm.ngx_tm_mon, tm.ngx_tm_mday, | 72 tm.ngx_tm_year, tm.ngx_tm_mon, tm.ngx_tm_mday, |
85 len = sizeof(errstr) - 2; | 118 len = sizeof(errstr) - 2; |
86 } | 119 } |
87 | 120 |
88 #if (WIN32) | 121 #if (WIN32) |
89 errstr[len++] = '\r'; | 122 errstr[len++] = '\r'; |
90 #endif | |
91 errstr[len++] = '\n'; | 123 errstr[len++] = '\n'; |
92 | 124 if (log->fd) { |
125 WriteFile(log->fd, errstr, len, &written, NULL); | |
126 } | |
127 #else | |
128 errstr[len++] = '\n'; | |
93 write(log->fd, errstr, len); | 129 write(log->fd, errstr, len); |
130 #endif | |
131 | |
94 | 132 |
95 #if 0 | 133 #if 0 |
96 errstr[len] = '\0'; | 134 errstr[len] = '\0'; |
97 fputs(errstr, stderr); | 135 fputs(errstr, stderr); |
98 fflush(stderr); | 136 fflush(stderr); |
134 va_end(args); | 172 va_end(args); |
135 } | 173 } |
136 | 174 |
137 #endif | 175 #endif |
138 | 176 |
177 | |
178 #if 0 | |
139 | 179 |
140 void ngx_log_stderr(ngx_event_t *ev) | 180 void ngx_log_stderr(ngx_event_t *ev) |
141 { | 181 { |
142 char errstr[MAX_ERROR_STR]; | 182 char errstr[MAX_ERROR_STR]; |
143 ssize_t n; | 183 ssize_t n; |
163 | 203 |
164 errstr[n] = '\0'; | 204 errstr[n] = '\0'; |
165 ngx_log_error(NGX_LOG_STDERR, &ngx_log, 0, "%s", errstr); | 205 ngx_log_error(NGX_LOG_STDERR, &ngx_log, 0, "%s", errstr); |
166 } | 206 } |
167 } | 207 } |
208 | |
209 #endif | |
210 | |
211 | |
212 static char *ngx_set_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | |
213 { | |
214 return ngx_log_set_errlog(cf, cmd, &ngx_log); | |
215 } | |
216 | |
217 | |
218 | |
219 ngx_log_t *ngx_log_init_errlog() | |
220 { | |
221 #if (WIN32) | |
222 ngx_log.fd = GetStdHandle(STD_ERROR_HANDLE); | |
223 | |
224 if (ngx_log.fd == NGX_INVALID_FILE) { | |
225 /* TODO: where we can log error ? */ | |
226 return NULL; | |
227 | |
228 } else if (ngx_log.fd == NULL) { | |
229 /* there are no associated standard handles */ | |
230 /* TODO: where we can log possible errors ? */ | |
231 } | |
232 | |
233 #else | |
234 ngx_log.fd = STDERR_FILENO; | |
235 #endif | |
236 | |
237 ngx_log.log_level = NGX_LOG_INFO; | |
238 /* STUB */ ngx_log.log_level = NGX_LOG_DEBUG; | |
239 | |
240 return &ngx_log; | |
241 } | |
242 | |
243 | |
244 char *ngx_log_set_errlog(ngx_conf_t *cf, ngx_command_t *cmd, ngx_log_t *log) | |
245 { | |
246 int len; | |
247 ngx_err_t err; | |
248 ngx_str_t *value; | |
249 | |
250 value = cf->args->elts; | |
251 | |
252 log->fd = ngx_open_file(value[1].data, | |
253 NGX_FILE_RDWR, | |
254 NGX_FILE_CREATE_OR_OPEN|NGX_FILE_APPEND); | |
255 | |
256 if (log->fd == NGX_INVALID_FILE) { | |
257 err = ngx_errno; | |
258 len = ngx_snprintf(ngx_conf_errstr, sizeof(ngx_conf_errstr) - 1, | |
259 ngx_open_file_n " \"%s\" failed (%d: ", | |
260 value[1].data, err); | |
261 len += ngx_strerror_r(err, ngx_conf_errstr + len, | |
262 sizeof(ngx_conf_errstr) - len - 1); | |
263 ngx_conf_errstr[len++] = ')'; | |
264 ngx_conf_errstr[len++] = '\0'; | |
265 return ngx_conf_errstr; | |
266 } | |
267 | |
268 #if (WIN32) | |
269 if (ngx_file_append_mode(log->fd) == NGX_ERROR) { | |
270 err = ngx_errno; | |
271 len = ngx_snprintf(ngx_conf_errstr, sizeof(ngx_conf_errstr) - 1, | |
272 ngx_file_append_mode_n " \"%s\" failed (%d: ", | |
273 value[1].data, err); | |
274 len += ngx_strerror_r(err, ngx_conf_errstr + len, | |
275 sizeof(ngx_conf_errstr) - len - 1); | |
276 ngx_conf_errstr[len++] = ')'; | |
277 ngx_conf_errstr[len++] = '\0'; | |
278 return ngx_conf_errstr; | |
279 } | |
280 #endif | |
281 | |
282 return NGX_CONF_OK; | |
283 } |