2013-08-12 2 views
4

Я запускаю некоторые приложения Meteor в ec2 и хочу получать уведомление по электронной почте, если у пользователя возникает ошибка 500. Есть ли способ поймать все 500 ошибок и обрабатывать их в одном месте?Метеор: отправьте письмо по электронной почте, если произошла ошибка 500

ответ

0

Все ошибки на стороне сервера должны выводиться в журнал вашего сервера. Я запускаю приложение Meteor на экземпляре EC2, который я установил с помощью сценария в https://github.com/storyandstructure/meteorite-ec2-install, и он настраивает такие вещи, что журналы моего приложения сохраняются в /var/log/myapp.log; ваша установка, вероятно, имеет нечто подобное.

Что касается получения электронной почты всякий раз, когда возникает ошибка, существует два варианта. Для всех ошибок, которые вызывают в результате ваш код (т. Е. Не из пакета), просто найдите, где вы поместили код throw new Meteor.Error и добавили строку Email.send(...) сразу после нее. (Разумеется, убедитесь, что вы добавили и настроили действительный MAIL_URL.)

Вы можете даже поймать некоторые ошибки, вызванные пакетами таким образом, если они возвратят что-либо обратно вызывающей функции; например, пакет электронной почты выдает ошибку, если функция send() не работает, что вы можете поймать в блоке try-catch в коде, в котором вы звоните Email.send() (а затем, гм, вы могли бы снова позвонить Email.send, что, надеюсь, будет работать второй раз, хотя если сбой был в первый раз из-за получателя, возможно, электронное письмо на вы вместо этого сделало бы трюк).

Для ошибок, которые возникают в результате пакетов, которые не возвращают никакой обратной связи вызывающей функции, это сложнее. Вам нужно будет создать отдельное приложение, также запущенное на сервере, которое читает файл журнала сервера так часто и ищет Exception или Error: в начале строки. Всякий раз, когда этот текст был найден, ваше приложение для мониторинга отправляет вам электронное письмо (предположительно, также скопировав некоторые последние строки из журнала в тело письма). Это другое приложение не обязательно должно быть приложением Meteor, на самом деле, вероятно, было бы лучше, если бы это было простое приложение node.js, не слушая ни одного порта. Надеемся, что единственные пакеты, ошибки которых вы беспокоитесь, например электронная почта, все забрасывают свои ошибки в цепочку, чтобы ваша логика приложения могла их поймать и что-то сделать.

+1

Я не думаю, что это допустимое решение. В идеале у вас будет решение для отслеживания ошибок в реальном времени, в котором ваши ошибки будут переданы на что-то вроде Elasticsearch (или электронной почты), где у вас будет больше контроля над тем, как вы их анализируете. Предполагая, что этот человек должен либо использовать файл '.log', либо вручную помещать' Email.send() 'каждый раз, когда возникает ошибка, это явно плохое решение для мужчин. Что делать, если вы интегрируете уведомления по электронной почте во все приложение (которое может быть довольно большим), а затем вдруг решите, что хотите использовать Raygun или Elasticsearch? Ты пьян. – user2205763

+0

Вместо этого в Meteor действительно должен быть способ перехватить все ошибки, выброшенные на сервер (или клиент) и обработать их. Я пишу пакет прямо сейчас в Meteor, который переопределит метод Meteor.Error и позволит вам ввести свой собственный метод отслеживания (не мешая остальной части его поведения). – user2205763

+0

Я не уверен, почему мой ответ оправдал нисходящее движение, тем более, что прошло более года, и никто не предложил никаких других предложений. Конечно, могут быть и должны быть другие решения, такие как идея пакета, предложенная в комментариях (инструкции и/или код, пожалуйста?), Или каким-либо образом сказать самому узлу отправлять электронные письма, когда происходит 500 ошибок; и это, вероятно, действительно будет лучшим решением. Но идеи в моем ответе действительно работают, и я фактически использовал их в производстве на EC2, как вопрос, заданный, поэтому они действительны. –

Смежные вопросы