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 }