Bash grep php error_log Фатальные ошибки в файл по фильтру


У меня есть веб-сервер с несколькими запущенными веб-приложениями (PHP). Конфигурация настроена таким образом, что php error_log удаляется в полночь (поэтому файл длится только 24 часа).

Дело в том, что я хотел бы регистрировать все фатальные ошибки в другом файле или базе данных, но только для определенных веб-приложений. (их около 20 ходовых, из них 4 мои).

Я думал о создании bash-скрипта, поиске файла error_log в «Fatal» и URL-адресе моих приложений, извлечении вывода в файл, а также запоминании номера последней строки текущего error_log в отдельном файле кеша.

Затем я помещал скрипт в cron и запускал его каждые несколько минут (начиная с последней строки предыдущего запуска).

Вся идея немного запутана, и я думаю, что это можно было бы написать эффективно, есть идеи?


person Jan Richter    schedule 16.03.2016    source источник
comment
Это нужно будет вставлять в каждое приложение, что является плохой практикой.   -  person Jan Richter    schedule 17.03.2016
comment
Это намного чище, чем эта обработка текста на основе cron, которую вы пытаетесь осуществить. А я думал, ты хочешь это только для нескольких приложений. Если вы не хотите использовать его в своем PHP-коде, поместите его в файл .htaccess. php_value error_log "/path/to/your/log/file" Настройка существует не просто так, не усложняйте себе жизнь, пытаясь не использовать ее!   -  person miken32    schedule 17.03.2016


Ответы (1)


Написание задания cron выглядит нормально, если вы не можете настроить его из коробки. Я недостаточно хорошо знаю PHP. В Java, например. вы можете отправить одно и то же сообщение журнала в несколько файлов журнала в зависимости от критериев.

Но я бы хотел, чтобы ваша работа cron выполняла как сбор фатальных ошибок, так и удаление файла журнала «последнего дня». Таким образом, вам может хватить одного запуска этого скрипта в полночь, и вы избавите себя от сложностей, связанных с знанием того, где вы закончили в прошлый раз (и вероятностью того, что вы пропустили некоторые ошибки, которые произошли прямо перед полуночью). Если со сбором все в порядке, удалите старый файл, в противном случае оставьте его для диагностики и повторите попытку. Это экономит кучу (24*60) вызовов скрипта.

person geert3    schedule 16.03.2016
comment
Cronjob для удаления файла настраивается системными администраторами (к сожалению, я не могу с этим работать). - person Jan Richter; 17.03.2016
comment
тогда, ИМХО, проще всего запустить cronjob за одну минуту до задания удаления и обработать весь файл сразу, а не работать с файлом каждые несколько минут в поисках «точки перезапуска». каждый раз. Опять же, вы потеряете последнюю минуту фатальных ошибок, но в любом случае это невозможно, если вы не можете помешать заданию удаления. - person geert3; 17.03.2016
comment
Проблема в том, что мне нужно видеть, как ошибки происходят почти в реальном времени. Вот почему я решил, что cronjob будет запускаться каждые несколько минут. - person Jan Richter; 17.03.2016
comment
вы рассматривали tail -f ? - person geert3; 17.03.2016
comment
ну, это можно было бы сделать, но хвост заканчивается каждый день, так как файл ежедневно удаляется. Вызывает вопрос, чтобы просто выполнить tail -f error_log для определенного файла и ежедневно обновлять его с помощью cronjob. - person Jan Richter; 17.03.2016
comment
да, это то, что я имею в виду. Вы можете обрабатывать хвостовой вывод вместо реального файла и использовать cron для повторного хвоста каждую ночь. В качестве бонуса, если вы запустите сценарий одновременно со сценарием удаления (и подождите, пока он создаст новый файл), у вас даже не будет проблемы возможной потери фатальных сообщений, которые происходят прямо перед полуночью, поскольку ваш Хвост наверняка видел все. - person geert3; 17.03.2016