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