2016-03-16 2 views
0


У меня есть веб-сервер с несколькими веб-приложениями, работающими (PHP). Конфигурация настроена так, что php error_log удаляется в полночь (так что файл длится только 24 часа).Bash grep php error_log Fatal errors to file by filter

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

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

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

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

+0

'' – miken32

+0

Это должно быть вставлено в каждое приложение, что является плохой практикой. – falnyr

+0

Это чертовски много чище, чем эта текстовая обработка на основе cron, которую вы пытаетесь снять. И я думал, что вы только хотели это для нескольких приложений. Если вы не хотите этого в вашем PHP-коде, поместите его в файл .htaccess. 'php_value error_log"/path/to/your/log/file "' Устанавливается по какой-то причине, не делайте вашу жизнь сложной, пытаясь не использовать ее! – miken32

ответ

1

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

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

+0

Cronjob для удаления файла настраивается системными администраторами (к сожалению, я не могу с этим работать). – falnyr

+0

, тогда IMHO проще всего завести вашу cronjob за одну минуту до удаления-задания и обрабатывать весь файл за один раз, а не работать через файл каждые несколько минут, и каждый раз ищет «точку перезапуска». Опять же, вы потеряете последнюю минуту фатальных ошибок, но там никак не обойтись, если вы не можете вмешиваться в задание удаления. – geert3

+0

Проблема в том, что мне нужно, чтобы ошибки происходили почти в режиме реального времени. Вот почему я решил, что cronjob будет выпущен каждые несколько минут. – falnyr