Где я должен хранить пользовательские журналы php?

У нас есть несколько пользовательских журналов, которые мы поддерживаем в базе данных (mysql). Мы используем эти журналы для отслеживания недавних ошибок и активности электронной почты в нашем приложении Zend Framework.

Недавно мы обнаружили, что эти журналы создают некоторую нагрузку на базу данных, поскольку мы выполняем несколько операций чтения / записи на этих вкладках журналов. Это также замедляет работу приложения, так как нам необходимо выполнить mysql INSERT, и иногда эти таблицы журналов блокируются другими запросами SELECT.

Мы используем Zend_Log Адаптеры для выполнения записи в журнал, как таковой:

    $columnMapping = array('url' => 'url', 'userAgent' => 'userAgent', 'info' => 'info', 'reffer' => 'reffer', 'userId' => 'userId', 'priority' => 'priority','dateInserted' => 'dateInserted', 'message' => 'message');
    $writer_db = new Zend_Log_Writer_Db($db, 'log', $columnMapping);

У нас также есть специальный cronjob, который каждую ночь очищает старые записи из журнала, что также создает некоторую нагрузку на базу данных.

Единственное требование, предъявляемое к этим журналам, заключается в том, что они должны быть доступны для поиска из центрального местоположения, поскольку у нас есть несколько серверов, пишущих эти журналы.

Любая альтернатива для записи журналов в приложении Zend Framework? любой хороший Zend_Log адаптеры, которые могут помочь в этом случае?

1 ответ

Решение

Вы можете использовать файловый регистратор для "диска", который используется всеми серверами через NTP. Он доступен для поиска с помощью стандартных инструментов поиска Unix (grep, awk и т. Д.).

Другим решением будет использование средства записи системного журнала и настройка сервера системного журнала, который получает сообщения журнала. Есть много приложений, которые могут анализировать формат системного журнала.

Третий вариант - использовать MongoDB в качестве хранилища для ваших логов. Вот статья, которая объясняет, как реализовать Log Writer, который пишет в MongoDB. MongoDB имеет "асинхронные вставки", поэтому вашему приложению не нужно ждать, пока запись журнала будет записана в базу данных.

Другие вопросы по тегам