error_log не завернут в stderr? Об этом просили - в том числе и я - ещё лет семь назад.
Вопрос скорее к майнтейнерам пакетов. Ни к сборке, ни к самим пакетам я отношения не имею, но предполагаю, что видимо потому, что писать error_log в stderr у сервиса, который должен выдерживать большие нагрузки - это в принципе плохая идея ибо можно потерять ценную информацию. Это ненадежно.
Один процесс пишет в stderr, а другой читает. Если читатель не успевает по какой-то причине за писателем, то писатель блокируется, либо просто теряет записанную информацию, ибо хранить её больше негде.
И как это отличается от stdout?
Никак. Но nginx пишет error_log в файл по-умолчанию.
> Это ненадежно. Да, но нет. Но вопрос был не про это, на самом деле. Рабочие логи в stderr никто не пишет, очевидно. Но конкретно моя проблема - в тестовых пайплайнах пачка nginx запускается в изолированном и очень урезанном окружении, где нету r/w файловых систем. С динамически просунутым конфигом, который сливает логи в централизованный коллектор. Только вот _до_ чтения конфига с директивам про логи nginx делает fopen() на compile-defined файл лога, чтобы писать туда про ошибки конфига. Из-за этого мне приходится держать собственный репозиторий пакетов.
Самый лучший способ сообщить об имеющихся трудностях - это завести тикет тут https://trac.nginx.org/nginx/ , если ещё не сделали. Я бы решил эту проблему добавив опцию командной строки, которая бы позволяла переопределить compile-time параметр. Ровно так мы в Unit и сделали.
Оок. Трак так трак.
Я примерно с 2017-го года руковожу разработкой nginx unit и в разработке nginx с тех пор участия не принимаю. Поэтому на какие-то вопросы ответить могу, а хотелки и пожелания через меня передавать не стоит.
Ага. Понятно, ок.
Обсуждают сегодня