Re: Не работает условное логгирование
Maxim Dounin
mdounin at mdounin.ru
Mon Apr 20 13:41:16 UTC 2015
Hello!
On Mon, Apr 20, 2015 at 09:13:24AM -0400, nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k wrote:
> Задаю в секции server{} следующее
>
> set $do_log 0;
> if ($status = 200){ set $do_log 1; }
> access_log /var/log/nginx/code-200.log combined if=$do_log;
>
> логгирование не работает, в лог вообще ничего не летит. Если использовать
> другие переменные, не $status, работает. Это ошибка в nginx ?
Нет, это ошибка в конфиге. Директивы модуля rewrite выполняются
до того, как становится известен статус ответа, соответственно
директива if в вышеприведённом фрагменте не может сработать
никогда.
Правильно так:
map $status $status_200 {
200 1;
}
access_log /path/to/200.log combined if=$status_200;
Подробнее про директивы модуля rewrite, если всё-таки хочется их
использовать, имеет смысл прочитать тут:
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html
Подробнее про map тут:
http://nginx.org/ru/docs/http/ngx_http_map_module.html
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru