ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: глобальные директивы erro r_log и pid



Hello!

On Sat, Nov 13, 2010 at 05:51:42PM +0200, Gena Makhomed wrote:

> On 13.11.2010 16:51, Maxim Dounin wrote in nginx@xxxxxxxxx list:
> 
> >> Ideally I would like Nginx to always write to the error log file as
> >> specified in the config, and never to the default error log file,
> >> but it seems that the codebase does not allow this
> >> and assumes logging facilities to be available
> >> even before the config file is loaded.
> 
> > Writing early errors to error_log as specified in config is not
> > possible as we haven't (yet) parsed the config.
> 
> это можно так сделать, чтобы писать early errors
> только в тот error_log, который указан в конфиге.
> 
> > It would be good to have something like '-e' switch instead,
> > similar to '-p' for prefix (actually, I even have it in my TODO
> > since 0.7.53, but ENOTIME).
> 
> примерно так сейчас Apache и делает:
> 
> # httpd -h 2>&1 | grep error
>   -e level           : show startup errors of level (see LogLevel)
>   -E file            : log startup errors to file
> 
> но это не очень красивое решение, потому что инофрмация тут дублируется,
> да и с pid-файлом будут аналогичные проблемы, тогда еще один ключ надо?

С pid-файлом таких проблем быть не может - он создаётся уже после 
заверешения парсинга конфига.

> я придумал более красивое решение:
> 
> 1. nginx определяет имя конфигурационного файла из параметра -с
>    или используется built-in значение, если ключ -c не определен.
> 
> 2. вызывается helper-функция, которая парсит конфигурационный файл,
>    считывая только несколько глобальных директив: error_log и pid,
>    если эти две директивы встретились в конфиге, парсинг прекращается.
>    директива include также игнорируется, как и возможные ошибки разбора.

Вопрос на самом деле очень простой: если мы хотим куда-то 
логировать ошибки открытия/парсинга конфига - то должны откуда-то ещё 
получить место для логирования этих ошибок.

Сейчас это "откуда-то ещё" - --error-log-path из бинарника (и 
префикс из бинарника или из ключа -p, если путь в --error-log-path 
относительный).

Предлагаемое решение в качестве "откуда-то ещё" сделать 
дополнительный sloppy-parser конфига мне кажется крайне 
сомнительным.

[...]

> 5. добавляется всего один параметр командной строки -G
> 
>   -G directive  : get global directive from configuration file
> 
> это необходимо для того, чтобы можно было seamless использовать
> один бинарник nginx для запуска нескольких независимых instances:
> 
> pidfile=`nginx -G pid`
> 
> и дальше init-script знает, какой pid file отвечает этому экземпляру.
> причем, вся конфигурация nginx находится только в одном месте - конфиге.

Just a side note: это не имеет ну никакого отношения к проблеме 
error_log'а.

Сейчас nginx не умеет "провернуть фарш назад", т.е. достать 
исходную строку как она была в конфиге.  А даже если бы и умел: 
для pid'а в общем случае нужна не исходная строка, а то во что она 
превратилась после применения префикса.

Так что сделать подобную функциональность универсальной - будет 
нетривиально, фактически нужно каждую директиву учить себя 
доставать обратно.

С другой стороны - вот именно для pid'а может быть и имеет смысл 
сделать.

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.