Ответ 1
Вы можете найти источник для реализации error_log в ext/standard/basic_functions.c
. Вы увидите, что он в значительной степени просто вызывает какой-либо определенный логгер. Если вас беспокоит какое-то перемещение данных по самому error_log из-за нескольких одновременных вызовов, не нужно. Или, по крайней мере, не более, чем большинство других фрагментов кода PHP. Если ваш пользовательский регистратор записывает в файл, вам необходимо реализовать блокировку файлов самостоятельно. Параллельные вызовы error_log (через процессы) - довольно распространенный сценарий.
изменить
Вам почти наверняка лучше использовать встроенный журнал, доступный через error_log
.
Реализация PHP flock использует консультативную блокировку, которая позволяет другим процессам просто игнорировать блокировку и запись. Кроме того, в ваших собственных процессах вы окажетесь IO
связанным, так как процесс ждет получения блокировки. Используя error_log
, вы можете настроить регистрацию syslog. Syslog является асинхронным, поэтому вы избегаете фиксации блокировки и также поддерживаете (обычно) буфер ядра, который позволяет любому демонам syslog записывать последовательные записи без проблем.
Внедрение протоколов высокой пропускной способности в ряде компаний я бы настоятельно рекомендовал настроить либо syslog, либо перейти к чему-то вроде писца. Мой 2c.