aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_log.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ngx_log.c')
-rw-r--r--src/core/ngx_log.c105
1 files changed, 40 insertions, 65 deletions
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index caf246a81..1f7bb11a9 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -3,7 +3,7 @@
#include <ngx_core.h>
-ngx_inline static int ngx_log_is_full(ngx_log_t *log, char *errstr, size_t len);
+static void ngx_log_write(ngx_log_t *log, char *errstr, size_t len);
static char *ngx_set_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
@@ -55,13 +55,10 @@ void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
#endif
{
char errstr[MAX_ERROR_STR];
- size_t len;
+ size_t len, max;
#if (HAVE_VARIADIC_MACROS)
va_list args;
#endif
-#if (WIN32)
- u_long written;
-#endif
if (log->file->fd == NGX_INVALID_FILE) {
return;
@@ -70,37 +67,42 @@ void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
ngx_memcpy(errstr, ngx_cached_err_log_time.data,
ngx_cached_err_log_time.len);
+#if (WIN32)
+ max = MAX_ERROR_STR - 2;
+#else
+ max = MAX_ERROR_STR - 1;
+#endif
+
len = ngx_cached_err_log_time.len;
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
- " [%s] ", err_levels[level]);
+ len += ngx_snprintf(errstr + len, max - len, " [%s] ", err_levels[level]);
/* pid#tid */
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
+ len += ngx_snprintf(errstr + len, max - len,
PID_T_FMT "#%d: ", ngx_getpid(), /* STUB */ 0);
if (log->data) {
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
+ len += ngx_snprintf(errstr + len, max - len,
"*%u ", * (u_int *) log->data);
}
#if (HAVE_VARIADIC_MACROS)
va_start(args, fmt);
- len += ngx_vsnprintf(errstr + len, sizeof(errstr) - len - 1, fmt, args);
+ len += ngx_vsnprintf(errstr + len, max - len, fmt, args);
va_end(args);
#else
- len += ngx_vsnprintf(errstr + len, sizeof(errstr) - len - 1, fmt, args);
+ len += ngx_vsnprintf(errstr + len, max - len, fmt, args);
#endif
if (err) {
- if (len > sizeof(errstr) - 50) {
+ if (len > max - 50) {
/* leave a space for an error code */
- len = sizeof(errstr) - 50;
+ len = max - 50;
errstr[len++] = '.';
errstr[len++] = '.';
errstr[len++] = '.';
@@ -108,91 +110,67 @@ void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
#if (WIN32)
if ((unsigned) err >= 0x80000000) {
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
- " (%X: ", err);
+ len += ngx_snprintf(errstr + len, max - len, " (%X: ", err);
} else {
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
- " (%d: ", err);
+ len += ngx_snprintf(errstr + len, max - len, " (%d: ", err);
}
#else
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
- " (%d: ", err);
+ len += ngx_snprintf(errstr + len, max - len, " (%d: ", err);
#endif
- if (ngx_log_is_full(log, errstr, len)) {
+ if (len >= max) {
+ ngx_log_write(log, errstr, max);
return;
}
- len += ngx_strerror_r(err, errstr + len, sizeof(errstr) - len - 1);
+ len += ngx_strerror_r(err, errstr + len, max - len);
- if (ngx_log_is_full(log, errstr, len)) {
+ if (len >= max) {
+ ngx_log_write(log, errstr, max);
return;
}
errstr[len++] = ')';
- if (ngx_log_is_full(log, errstr, len)) {
+ if (len >= max) {
+ ngx_log_write(log, errstr, max);
return;
}
} else {
- if (ngx_log_is_full(log, errstr, len)) {
+ if (len >= max) {
+ ngx_log_write(log, errstr, max);
return;
}
}
if (level != NGX_LOG_DEBUG && log->handler) {
- len += log->handler(log->data, errstr + len, sizeof(errstr) - len - 1);
+ len += log->handler(log->data, errstr + len, max - len);
- if (ngx_log_is_full(log, errstr, len)) {
- return;
+ if (len >= max) {
+ len = max;
}
}
-#if (WIN32)
-
- errstr[len++] = CR;
- errstr[len++] = LF;
- WriteFile(log->file->fd, errstr, len, &written, NULL);
-
-#else
-
- errstr[len++] = LF;
- write(log->file->fd, errstr, len);
-
-#endif
+ ngx_log_write(log, errstr, len);
}
-ngx_inline static int ngx_log_is_full(ngx_log_t *log, char *errstr, size_t len)
+static void ngx_log_write(ngx_log_t *log, char *errstr, size_t len)
{
#if (WIN32)
u_long written;
- if (len > MAX_ERROR_STR - 2) {
- len = MAX_ERROR_STR - 2;
-
- errstr[len++] = CR;
- errstr[len++] = LF;
- WriteFile(log->file->fd, errstr, len, &written, NULL);
-
- return 1;
- }
+ errstr[len++] = CR;
+ errstr[len++] = LF;
+ WriteFile(log->file->fd, errstr, len, &written, NULL);
#else
- if (len > MAX_ERROR_STR - 1) {
- len = MAX_ERROR_STR - 1;
-
- errstr[len++] = LF;
- write(log->file->fd, errstr, len);
-
- return 1;
- }
+ errstr[len++] = LF;
+ write(log->file->fd, errstr, len);
#endif
-
- return 0;
}
@@ -320,7 +298,7 @@ ngx_log_t *ngx_log_create_errlog(ngx_cycle_t *cycle, ngx_array_t *args)
ngx_test_null(log, ngx_pcalloc(cycle->pool, sizeof(ngx_log_t)), NULL);
ngx_test_null(log->file, ngx_conf_open_file(cycle, name), NULL);
-#if 1
+#if 0
/* STUB */ log->log_level = NGX_LOG_DEBUG | NGX_LOG_DEBUG_CORE | NGX_LOG_DEBUG_ALLOC | NGX_LOG_DEBUG_EVENT | NGX_LOG_DEBUG_HTTP;
#endif
@@ -369,9 +347,8 @@ char *ngx_set_error_log_levels(ngx_conf_t *cf, ngx_log_t *log)
}
}
- d = NGX_LOG_DEBUG_FIRST;
- for (n = 0; n < /* STUB */ 4; n++) {
- if (ngx_strcmp(value[i].data, debug_levels[n]) == 0) {
+ for (n = 0, d = NGX_LOG_DEBUG_FIRST; d <= NGX_LOG_DEBUG_LAST; d <<= 1) {
+ if (ngx_strcmp(value[i].data, debug_levels[n++]) == 0) {
if (log->log_level & ~NGX_LOG_DEBUG_ALL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid log level \"%s\"",
@@ -381,8 +358,6 @@ char *ngx_set_error_log_levels(ngx_conf_t *cf, ngx_log_t *log)
log->log_level |= d;
}
-
- d <<= 1;
}