comparison src/core/ngx_log.c @ 5702:777202558122

Added syslog support for error_log and access_log directives.
author Vladimir Homutov <vl@nginx.com>
date Mon, 12 May 2014 16:34:15 +0400
parents e088695737c3
children c3b08217f2a2
comparison
equal deleted inserted replaced
5701:1209b8a7b077 5702:777202558122
146 146
147 if (log->log_level < level && !debug_connection) { 147 if (log->log_level < level && !debug_connection) {
148 break; 148 break;
149 } 149 }
150 150
151 if (log->writer) {
152 log->writer(log, level, errstr, p - errstr);
153 log = log->next;
154 continue;
155 }
156
151 (void) ngx_write_fd(log->file->fd, errstr, p - errstr); 157 (void) ngx_write_fd(log->file->fd, errstr, p - errstr);
152 158
153 if (log->file->fd == ngx_stderr) { 159 if (log->file->fd == ngx_stderr) {
154 wrote_stderr = 1; 160 wrote_stderr = 1;
155 } 161 }
364 370
365 371
366 ngx_int_t 372 ngx_int_t
367 ngx_log_open_default(ngx_cycle_t *cycle) 373 ngx_log_open_default(ngx_cycle_t *cycle)
368 { 374 {
369 static ngx_str_t error_log = ngx_string(NGX_ERROR_LOG_PATH); 375 ngx_log_t *log;
370 376 static ngx_str_t error_log = ngx_string(NGX_ERROR_LOG_PATH);
371 if (cycle->new_log.file == NULL) { 377
372 cycle->new_log.file = ngx_conf_open_file(cycle, &error_log); 378 if (ngx_log_get_file_log(&cycle->new_log) != NULL) {
373 if (cycle->new_log.file == NULL) { 379 return NGX_OK;
380 }
381
382 if (cycle->new_log.log_level != 0) {
383 /* there are some error logs, but no files */
384
385 log = ngx_pcalloc(cycle->pool, sizeof(ngx_log_t));
386 if (log == NULL) {
374 return NGX_ERROR; 387 return NGX_ERROR;
375 } 388 }
376 389
377 cycle->new_log.log_level = NGX_LOG_ERR; 390 log->log_level = NGX_LOG_ERR;
391 ngx_log_insert(&cycle->new_log, log);
392
393 } else {
394 /* no error logs at all */
395 log = &cycle->new_log;
396 log->log_level = NGX_LOG_ERR;
397 }
398
399 log->file = ngx_conf_open_file(cycle, &error_log);
400 if (log->file == NULL) {
401 return NGX_ERROR;
378 } 402 }
379 403
380 return NGX_OK; 404 return NGX_OK;
381 } 405 }
382 406
388 412
389 if (cycle->log_use_stderr) { 413 if (cycle->log_use_stderr) {
390 return NGX_OK; 414 return NGX_OK;
391 } 415 }
392 416
393 fd = cycle->log->file->fd; 417 /* file log always exists when we are called */
418 fd = ngx_log_get_file_log(cycle->log)->file->fd;
394 419
395 if (fd != ngx_stderr) { 420 if (fd != ngx_stderr) {
396 if (ngx_set_stderr(fd) == NGX_FILE_ERROR) { 421 if (ngx_set_stderr(fd) == NGX_FILE_ERROR) {
397 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, 422 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
398 ngx_set_stderr_n " failed"); 423 ngx_set_stderr_n " failed");
400 return NGX_ERROR; 425 return NGX_ERROR;
401 } 426 }
402 } 427 }
403 428
404 return NGX_OK; 429 return NGX_OK;
430 }
431
432
433 ngx_log_t *
434 ngx_log_get_file_log(ngx_log_t *head)
435 {
436 ngx_log_t *log;
437
438 for (log = head; log; log = log->next) {
439 if (log->file != NULL) {
440 return log;
441 }
442 }
443
444 return NULL;
405 } 445 }
406 446
407 447
408 static char * 448 static char *
409 ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log) 449 ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log)
480 520
481 521
482 char * 522 char *
483 ngx_log_set_log(ngx_conf_t *cf, ngx_log_t **head) 523 ngx_log_set_log(ngx_conf_t *cf, ngx_log_t **head)
484 { 524 {
485 ngx_log_t *new_log; 525 ngx_log_t *new_log;
486 ngx_str_t *value, name; 526 ngx_str_t *value, name;
527 ngx_syslog_peer_t *peer;
487 528
488 if (*head != NULL && (*head)->log_level == 0) { 529 if (*head != NULL && (*head)->log_level == 0) {
489 new_log = *head; 530 new_log = *head;
490 531
491 } else { 532 } else {
504 545
505 if (ngx_strcmp(value[1].data, "stderr") == 0) { 546 if (ngx_strcmp(value[1].data, "stderr") == 0) {
506 ngx_str_null(&name); 547 ngx_str_null(&name);
507 cf->cycle->log_use_stderr = 1; 548 cf->cycle->log_use_stderr = 1;
508 549
550 new_log->file = ngx_conf_open_file(cf->cycle, &name);
551 if (new_log->file == NULL) {
552 return NGX_CONF_ERROR;
553 }
554
555
556 } else if (ngx_strncmp(value[1].data, "syslog:", 7) == 0) {
557 peer = ngx_pcalloc(cf->pool, sizeof(ngx_syslog_peer_t));
558 if (peer == NULL) {
559 return NGX_CONF_ERROR;
560 }
561
562 if (ngx_syslog_process_conf(cf, peer) != NGX_CONF_OK) {
563 return NGX_CONF_ERROR;
564 }
565
566 new_log->writer = ngx_syslog_writer;
567 new_log->wdata = peer;
568
509 } else { 569 } else {
510 name = value[1]; 570 new_log->file = ngx_conf_open_file(cf->cycle, &value[1]);
511 } 571 if (new_log->file == NULL) {
512 572 return NGX_CONF_ERROR;
513 new_log->file = ngx_conf_open_file(cf->cycle, &name); 573 }
514 if (new_log->file == NULL) {
515 return NGX_CONF_ERROR;
516 } 574 }
517 575
518 if (ngx_log_set_levels(cf, new_log) != NGX_CONF_OK) { 576 if (ngx_log_set_levels(cf, new_log) != NGX_CONF_OK) {
519 return NGX_CONF_ERROR; 577 return NGX_CONF_ERROR;
520 } 578 }