#php #logging #file-put-contents
#php #ведение журнала #file-put-contents
Вопрос:
У меня есть фрагмент кода в большинстве моих функций для ведения журнала, который сейчас находится в производстве, и мы видим файлы журналов объемом 2 ГБ в день, можно ли записывать непосредственно в файлы журналов, используя file_put_contents. Мы предполагаем, что этот file_get_contents станет точкой блокировки по мере увеличения размера и трафика. Может кто-нибудь подсказать мне правильный способ ведения журнала в физических файлах без блокировки php. Любой другой подход наиболее приветствуется.
file_put_contents(
getcwd() . "debug_log.txt",
"" . print_r($updateFieldsArray, true) . "n",
FILE_APPEND | LOCK_EX
);
Заранее спасибо.
Комментарии:
1. Вероятно, запись журналов в БД может быть решением вашей проблемы
2. @Sfili_81 да, это тоже может быть вариантом
3. Как насчет использования собственной
error_log
функции PHPs?4. @dave только что прошел php.net/manual/en/function.error-log.php и в соответствии с этим он также имеет ограничения по памяти, хотя это можно настроить. Также, что, если код выполняется в cli .
5. Не уверен, где вы видели ограничения памяти. То, как используется PHP, не имеет значения, особенно если вы задаете тип сообщения по умолчанию.
Ответ №1:
Запись журналов в файлы в конечном итоге станет узким местом, если вы продолжите расти (просто потому, что все может стать узким местом), но мы не можем сказать вам, стоит ли вам беспокоиться об этом сейчас. Вы могли бы начать использовать библиотеку ведения журнала, которая позволяет изменять систему хранения с помощью конфигурации, такой как monolog.
Эти библиотеки также очень полезны при разработке. Вы можете делать такие вещи, как включить отладочный вывод, но только для той части приложения, с которой вы работаете.
Вы всегда можете переместить журналы на более быстрый диск или прекратить записывать ненужную вам информацию. Более сложная проблема с ведением журнала в файлах заключается в том, что вы будете делать, когда у вас более одного сервера (подумайте о балансировке нагрузки, высокой доступности). Теперь вам нужно прочитать журналы на всех серверах, чтобы найти что-либо.
Возможное решение заключается в том, чтобы все серверы отправляли свои журналы на централизованный сервер журналов. Это можно сделать с помощью syslog. В качестве альтернативы на каждом сервере может быть установлена программа, которая считывает файлы журнала по мере их создания и сохраняет информацию в центральной базе данных. Это то, что делает logstash.
Комментарии:
1. спасибо, это было очень информативно, что касается централизованного ведения журнала, мы будем использовать ELK stack.