issue start up errors and warning on both stderr and error_log

This commit is contained in:
Igor Sysoev 2009-04-23 11:13:12 +00:00
parent d4dc08bc11
commit ddba51983f
11 changed files with 116 additions and 65 deletions

4
auto/configure vendored
View file

@ -71,9 +71,7 @@ have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define
have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
if test -n "$NGX_ERROR_LOG_PATH"; then
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define
fi
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define
have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define
have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\""

View file

@ -207,10 +207,10 @@ main(int argc, char *const *argv)
}
if (ngx_show_version) {
ngx_log_stderr("nginx version: " NGINX_VER);
ngx_log_stderr(0, "nginx version: " NGINX_VER);
if (ngx_show_help) {
ngx_log_stderr(
ngx_log_stderr(0,
"Usage: nginx [-?hvVt] [-s signal] [-c filename] "
"[-g directives]" CRLF CRLF
"Options:" CRLF
@ -230,9 +230,9 @@ main(int argc, char *const *argv)
if (ngx_show_configure) {
#ifdef NGX_COMPILER
ngx_log_stderr("built by " NGX_COMPILER);
ngx_log_stderr(0, "built by " NGX_COMPILER);
#endif
ngx_log_stderr("configure arguments: " NGX_CONFIGURE);
ngx_log_stderr(0, "configure arguments: " NGX_CONFIGURE);
}
if (!ngx_test_config) {
@ -308,7 +308,7 @@ main(int argc, char *const *argv)
cycle = ngx_init_cycle(&init_cycle);
if (cycle == NULL) {
if (ngx_test_config) {
ngx_log_stderr("the configuration file %s test failed",
ngx_log_stderr(0, "configuration file %s test failed",
init_cycle.conf_file.data);
}
@ -316,7 +316,7 @@ main(int argc, char *const *argv)
}
if (ngx_test_config) {
ngx_log_stderr("the configuration file %s was tested successfully",
ngx_log_stderr(0, "configuration file %s test is successful",
cycle->conf_file.data);
return 0;
}
@ -355,6 +355,17 @@ main(int argc, char *const *argv)
return 1;
}
if (cycle->log->file->fd != ngx_stderr) {
if (ngx_set_stderr(cycle->log->file->fd) == NGX_FILE_ERROR) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
ngx_set_stderr_n " failed");
return 1;
}
}
ngx_use_stderr = 0;
if (ngx_process == NGX_PROCESS_SINGLE) {
ngx_single_process_cycle(cycle);
@ -622,7 +633,7 @@ ngx_get_options(int argc, char *const *argv)
p = (u_char *) argv[i];
if (*p++ != '-') {
ngx_log_stderr("invalid option: \"%s\"", argv[i]);
ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]);
return NGX_ERROR;
}
@ -660,7 +671,7 @@ ngx_get_options(int argc, char *const *argv)
goto next;
}
ngx_log_stderr("the option \"-c\" requires file name");
ngx_log_stderr(0, "option \"-c\" requires file name");
return NGX_ERROR;
case 'g':
@ -674,7 +685,7 @@ ngx_get_options(int argc, char *const *argv)
goto next;
}
ngx_log_stderr("the option \"-g\" requires parameter");
ngx_log_stderr(0, "option \"-g\" requires parameter");
return NGX_ERROR;
case 's':
@ -685,7 +696,7 @@ ngx_get_options(int argc, char *const *argv)
ngx_signal = argv[i];
} else {
ngx_log_stderr("the option \"-s\" requires parameter");
ngx_log_stderr(0, "option \"-s\" requires parameter");
return NGX_ERROR;
}
@ -698,11 +709,11 @@ ngx_get_options(int argc, char *const *argv)
goto next;
}
ngx_log_stderr("invalid option: \"-s %s\"", ngx_signal);
ngx_log_stderr(0, "invalid option: \"-s %s\"", ngx_signal);
return NGX_ERROR;
default:
ngx_log_stderr("invalid option: \"%c\"", *(p - 1));
ngx_log_stderr(0, "invalid option: \"%c\"", *(p - 1));
return NGX_ERROR;
}
}

View file

@ -892,7 +892,7 @@ ngx_conf_open_file(ngx_cycle_t *cycle, ngx_str_t *name)
file->name = full;
} else {
file->fd = ngx_stderr_fileno;
file->fd = ngx_stderr;
file->name.len = 0;
file->name.data = NULL;
}

View file

@ -270,7 +270,7 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
}
if (ngx_test_config) {
ngx_log_stderr("the configuration file %s syntax is ok",
ngx_log_stderr(0, "the configuration file %s syntax is ok",
cycle->conf_file.data);
}
@ -582,25 +582,14 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
/* commit the new cycle configuration */
#if !(NGX_WIN32)
if (!ngx_use_stderr && cycle->log->file->fd != ngx_stderr) {
if (!ngx_test_config && cycle->log->file->fd != STDERR_FILENO) {
ngx_log_debug3(NGX_LOG_DEBUG_CORE, log, 0,
"dup2: %p %d \"%s\"",
cycle->log->file,
cycle->log->file->fd, cycle->log->file->name.data);
if (dup2(cycle->log->file->fd, STDERR_FILENO) == -1) {
ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
"dup2(STDERR) failed");
/* fatal */
exit(1);
if (ngx_set_stderr(cycle->log->file->fd) == NGX_FILE_ERROR) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
ngx_set_stderr_n " failed");
}
}
#endif
pool->log = cycle->log;
for (i = 0; ngx_modules[i]; i++) {
@ -697,7 +686,7 @@ old_shm_zone_done:
i = 0;
}
if (file[i].fd == NGX_INVALID_FILE || file[i].fd == ngx_stderr_fileno) {
if (file[i].fd == NGX_INVALID_FILE || file[i].fd == ngx_stderr) {
continue;
}
@ -797,7 +786,7 @@ failed:
i = 0;
}
if (file[i].fd == NGX_INVALID_FILE || file[i].fd == ngx_stderr_fileno) {
if (file[i].fd == NGX_INVALID_FILE || file[i].fd == ngx_stderr) {
continue;
}

View file

@ -48,7 +48,8 @@ ngx_module_t ngx_errlog_module = {
static ngx_log_t ngx_log;
static ngx_open_file_t ngx_stderr;
static ngx_open_file_t ngx_log_file;
ngx_uint_t ngx_use_stderr = 1;
static ngx_str_t err_levels[] = {
@ -86,7 +87,8 @@ ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
#if (NGX_HAVE_VARIADIC_MACROS)
va_list args;
#endif
u_char errstr[NGX_MAX_ERROR_STR], *p, *last;
u_char *p, *last, *msg;
u_char errstr[NGX_MAX_ERROR_STR];
if (log->file->fd == NGX_INVALID_FILE) {
return;
@ -109,6 +111,8 @@ ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
p = ngx_snprintf(p, last - p, "*%uA ", log->connection);
}
msg = p;
#if (NGX_HAVE_VARIADIC_MACROS)
va_start(args, fmt);
@ -158,6 +162,19 @@ ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
ngx_linefeed(p);
(void) ngx_write_fd(log->file->fd, errstr, p - errstr);
if (!ngx_use_stderr
|| level > NGX_LOG_WARN
|| log->file->fd == ngx_stderr)
{
return;
}
msg -= (err_levels[level].len + 4);
(void) ngx_sprintf(msg, "[%V]: ", &err_levels[level]);
ngx_write_fd(ngx_stderr, msg, p - msg);
}
@ -198,9 +215,9 @@ ngx_log_abort(ngx_err_t err, const char *text, void *param)
void ngx_cdecl
ngx_log_stderr(const char *fmt, ...)
ngx_log_stderr(ngx_err_t err, const char *fmt, ...)
{
u_char *p;
u_char *p, *last;
va_list args;
u_char errstr[NGX_MAX_ERROR_STR];
@ -212,46 +229,75 @@ ngx_log_stderr(const char *fmt, ...)
p = errstr + NGX_MAX_ERROR_STR - NGX_LINEFEED_SIZE;
}
ngx_linefeed(p);
if (err) {
last = errstr + NGX_MAX_ERROR_STR;
if (p > last - 50) {
/* leave a space for an error code */
p = last - 50;
*p++ = '.';
*p++ = '.';
*p++ = '.';
}
#if (NGX_WIN32)
if (ngx_stderr_fileno == NULL) {
ngx_stderr_fileno = GetStdHandle(STD_ERROR_HANDLE);
}
p = ngx_snprintf(p, last - p, ((unsigned) err < 0x80000000)
? " (%d: " : " (%Xd: ", err);
#else
p = ngx_snprintf(p, last - p, " (%d: ", err);
#endif
(void) ngx_write_fd(ngx_stderr_fileno, errstr, p - errstr);
p = ngx_strerror_r(err, p, last - p);
if (p < last) {
*p++ = ')';
}
}
ngx_linefeed(p);
ngx_write_fd(ngx_stderr, errstr, p - errstr);
}
ngx_log_t *
ngx_log_init(void)
{
ngx_log.file = &ngx_stderr;
ngx_log.file = &ngx_log_file;
ngx_log.log_level = NGX_LOG_NOTICE;
#if (NGX_WIN32)
/*
* we use ngx_strlen() here since BCC warns about
* condition is always false and unreachable code
*/
ngx_stderr.fd = ngx_open_file((u_char *) NGX_ERROR_LOG_PATH,
NGX_FILE_APPEND,
NGX_FILE_CREATE_OR_OPEN,
NGX_FILE_DEFAULT_ACCESS);
if (ngx_stderr.fd == NGX_INVALID_FILE) {
ngx_event_log(ngx_errno,
"Could not open error log file: "
ngx_open_file_n " \"" NGX_ERROR_LOG_PATH "\" failed");
return NULL;
if (ngx_strlen(NGX_ERROR_LOG_PATH) == 0) {
ngx_log_file.fd = ngx_stderr;
return &ngx_log;
}
#else
ngx_log_file.fd = ngx_open_file((u_char *) NGX_ERROR_LOG_PATH,
NGX_FILE_APPEND,
NGX_FILE_CREATE_OR_OPEN,
NGX_FILE_DEFAULT_ACCESS);
ngx_stderr.fd = STDERR_FILENO;
if (ngx_log_file.fd == NGX_INVALID_FILE) {
ngx_log_stderr(ngx_errno,
"[emerg]: could not open error log file: "
ngx_open_file_n " \"" NGX_ERROR_LOG_PATH "\" failed");
#if (NGX_WIN32)
ngx_event_log(ngx_errno,
"could not open error log file: "
ngx_open_file_n " \"" NGX_ERROR_LOG_PATH "\" failed");
#endif
return NULL;
}
return &ngx_log;
}
@ -349,7 +395,7 @@ ngx_set_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
value = cf->args->elts;
if (value[1].len == 6 && ngx_strcmp(value[1].data, "stderr") == 0) {
cf->cycle->new_log->file->fd = ngx_stderr.fd;
cf->cycle->new_log->file->fd = ngx_stderr;
cf->cycle->new_log->file->name.len = 0;
cf->cycle->new_log->file->name.data = NULL;

View file

@ -199,10 +199,11 @@ ngx_log_t *ngx_log_init(void);
ngx_log_t *ngx_log_create_errlog(ngx_cycle_t *cycle, ngx_array_t *args);
char *ngx_set_error_log_levels(ngx_conf_t *cf, ngx_log_t *log);
void ngx_log_abort(ngx_err_t err, const char *text, void *param);
void ngx_cdecl ngx_log_stderr(const char *fmt, ...);
void ngx_cdecl ngx_log_stderr(ngx_err_t err, const char *fmt, ...);
extern ngx_module_t ngx_errlog_module;
extern ngx_uint_t ngx_use_stderr;
#endif /* _NGX_LOG_H_INCLUDED_ */

View file

@ -273,8 +273,12 @@ ngx_int_t ngx_directio_off(ngx_fd_t fd);
#endif
size_t ngx_fs_bsize(u_char *name);
#define ngx_stderr STDERR_FILENO
#define ngx_set_stderr(fd) dup2(fd, STDERR_FILENO)
#define ngx_set_stderr_n "dup2(STDERR_FILENO)"
#endif /* _NGX_FILES_H_INCLUDED_ */

View file

@ -54,7 +54,6 @@ extern ngx_int_t ngx_max_sockets;
extern ngx_uint_t ngx_inherited_nonblocking;
extern ngx_uint_t ngx_tcp_nodelay_and_tcp_nopush;
#define ngx_stderr_fileno STDERR_FILENO
#if (NGX_FREEBSD)
#include <ngx_freebsd.h>

View file

@ -237,4 +237,9 @@ ngx_int_t ngx_directio_off(ngx_fd_t fd);
size_t ngx_fs_bsize(u_char *name);
#define ngx_stderr GetStdHandle(STD_ERROR_HANDLE)
#define ngx_set_stderr(fd) SetStdHandle(STD_ERROR_HANDLE, fd)
#define ngx_set_stderr_n "SetStdHandle(STD_ERROR_HANDLE)"
#endif /* _NGX_FILES_H_INCLUDED_ */

View file

@ -58,7 +58,6 @@ extern ngx_int_t ngx_max_sockets;
extern ngx_uint_t ngx_inherited_nonblocking;
extern ngx_uint_t ngx_tcp_nodelay_and_tcp_nopush;
extern ngx_uint_t ngx_win32_version;
extern ngx_fd_t ngx_stderr_fileno;
extern char ngx_unique[];

View file

@ -16,7 +16,6 @@ ngx_int_t ngx_max_sockets;
ngx_uint_t ngx_inherited_nonblocking = 1;
ngx_uint_t ngx_tcp_nodelay_and_tcp_nopush;
ngx_fd_t ngx_stderr_fileno;
char ngx_unique[NGX_INT32_LEN + 1];