Закрывает ли apache каждый файл журнала после каждой записи?
Используйте источник, он находится по адресу:
https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/loggers/mod_log_config.c?view=markup
Вы можете прочитать из него:
251 * log_writer имеет значение NULL перед открытием файла журнала и
252 * устанавливается в непрозрачную структуру (обычно fd) после ее открытия.
Это своего рода намеки на то, что он открыт только один раз.
На самом деле, если вы посмотрите на код, он открывается рано, при инициализации, а затем никогда не закрывается по очевидным причинам производительности.
Если нет, то каково решение, когда несколько серверов записывают данные в одно место регистрации в сетевой файловой системе?
Абсолютно никогда не делайте этого по двум причинам. Во-первых, не регистрируйтесь удаленно таким образом. Зарегистрируйтесь локально (и отправляйте файлы журналов отдельно, например, вы можете чередовать их ежечасно) или используйте соответствующие демоны, системный журнал
по умолчанию знает, как отправлять содержимое журнала по UDP (или TCP), как и более новые решения. Не монтируйте удаленный диск и не записывайте на него файлы журналов, это убьет производительность и создаст целую кучу проблем (особенно если вы имеете в виду удаленный, как в «NFS»).
И даже если локально, каждое приложение должно вести журнал в свой собственный файл журнала, не допускайте ведения журнала нескольких приложений в один и тот же файл, это обязательно создаст всевозможные условия гонки, перезапись и т. д. Apache сам по себе является одним приложением, даже если он разветвляется. , но если у вас есть 2 Apache, работающих отдельно на одном хосте с разными конфигурациями, каждый из них должен вести журнал в свои собственные файлы журналов.
Или посмотрите на функцию Apache для входа в каналы, но у нее тоже есть недостатки.