diff --git a/src/core/nginx.c b/src/core/nginx.c
index 28fffa0..63185bc 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -207,10 +207,10 @@
     }
 
     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 @@
 
         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 @@
     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 @@
     }
 
     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 @@
         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 @@
         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 @@
                     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 @@
                     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_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 @@
                     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;
             }
         }
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index 7ec574e..9b0f67c 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -892,7 +892,7 @@
         file->name = full;
 
     } else {
-        file->fd = ngx_stderr_fileno;
+        file->fd = ngx_stderr;
         file->name.len = 0;
         file->name.data = NULL;
     }
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index 476ba83..0c0fd8a 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -270,7 +270,7 @@
     }
 
     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 @@
 
     /* 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 @@
             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 @@
             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;
         }
 
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index dabc8e4..2099640 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -48,7 +48,8 @@
 
 
 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 @@
 #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 @@
         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_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 @@
 
 
 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 @@
         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 @@
     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;
 
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index 53136d1..5168cd8 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -199,10 +199,11 @@
 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_ */
