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).
This commit is contained in:
Maxim Dounin 2011-08-18 21:48:13 +00:00
parent b7fcb430c1
commit 65c32b255d

View File

@ -369,12 +369,13 @@ ngx_log_create(ngx_cycle_t *cycle, ngx_str_t *name)
char * char *
ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log) 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; ngx_str_t *value;
value = cf->args->elts; value = cf->args->elts;
for (i = 2; i < cf->args->nelts; i++) { for (i = 2; i < cf->args->nelts; i++) {
found = 0;
for (n = 1; n <= NGX_LOG_DEBUG; n++) { for (n = 1; n <= NGX_LOG_DEBUG; n++) {
if (ngx_strcmp(value[i].data, err_levels[n].data) == 0) { 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; 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; log->log_level |= d;
found = 1;
break;
} }
} }
if (log->log_level == 0) { if (!found) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid log level \"%V\"", &value[i]); "invalid log level \"%V\"", &value[i]);
return NGX_CONF_ERROR; return NGX_CONF_ERROR;