diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2011-08-18 21:48:13 +0000 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2011-08-18 21:48:13 +0000 |
commit | 65c32b255dbb98a228330090d4ddb889a88994f5 (patch) | |
tree | 5a84b62a27cd3cddbb9e8748bd2e570ad41f7304 | |
parent | b7fcb430c156952fce4cb43a0a3cd81c2a5c939e (diff) | |
download | nginx-65c32b255dbb98a228330090d4ddb889a88994f5.tar.gz nginx-65c32b255dbb98a228330090d4ddb889a88994f5.zip |
Complain on invalid log levels.
Previously only first log level was required to be correct, while error_log
directive in fact accepts list of levels (e.g. one may specify "error_log ...
debug_core debug_http;"). This resulted in (avoidable) wierd behaviour on
missing semicolon after error_log directive, e.g.
error_log /path/to/log info
index index.php;
silently skipped index directive and it's arguments (trying to interpret
them as log levels without checking to be correct).
-rw-r--r-- | src/core/ngx_log.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c index 44333146d..e7d597e7e 100644 --- a/src/core/ngx_log.c +++ b/src/core/ngx_log.c @@ -369,12 +369,13 @@ ngx_log_create(ngx_cycle_t *cycle, ngx_str_t *name) char * ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log) { - ngx_uint_t i, n, d; + ngx_uint_t i, n, d, found; ngx_str_t *value; value = cf->args->elts; for (i = 2; i < cf->args->nelts; i++) { + found = 0; for (n = 1; n <= NGX_LOG_DEBUG; n++) { if (ngx_strcmp(value[i].data, err_levels[n].data) == 0) { @@ -387,7 +388,8 @@ ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log) } log->log_level = n; - continue; + found = 1; + break; } } @@ -401,11 +403,13 @@ ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log) } log->log_level |= d; + found = 1; + break; } } - if (log->log_level == 0) { + if (!found) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid log level \"%V\"", &value[i]); return NGX_CONF_ERROR; |