Логирование JS ошибок на сервер

Фанат

oncle terrible
Команда форума
Существует ли какой-нибудь стандартный механизм для логирования ошибок яваскрипта на сервере?
Какой-нибудь код, который бы при возникновении ошибки дергал определённый урл, в квери стринге передавая текст ошибки.
Или как вообще такие вещи делаются?

Сторонние сервисы рассматриваются в последнюю очередь. Как-то отдавать свои ошибки чужому дяде не очень хочется.
 

Фанат

oncle terrible
Команда форума
Эх. Полтора мегабайта исходников...
Не хочется выглядеть привередливой скотиной, но таких размеров я как раз побаиваюсь...
 

fixxxer

К.О.
Партнер клуба
Да ладно, там полтора мегабайта док с примерами, основной скрипт меньше 200 кило в несжатом виде
 

fixxxer

К.О.
Партнер клуба
Ну, во первых, 200 несжатый с комментариями.
Во-вторых, ненужное легко отрезается.
 

Sender

Новичок
Я логирую на windows.onerror, не во всех браузерах работает, но для очевидной ошибки хватает. Много ложных срабатываний (кривые плагины стоят, поисковики ходят ошибки генерируют и т.п.), явно надо еще фильтровать часто повторяющиеся ошибки-фантомы, все никак руки не доходят.
 

fixxxer

К.О.
Партнер клуба
Если по каждому window.onerror делать ajax-запрос, можно запросто устроить self-DDOS, а при наличии проблем на серверах они будут усугублены на порядки.

Вот наглядная история успеха.
 

Sender

Новичок
эм, сходил по ссылке, не вижу где там про window.onerror идет речь.

DDOS начнется если браузер пользователя начнет генерить тучу javascript ошибок. Тогда на сервер пойдет много запросов на логирование ошибки. Сам ajax запрос ошибки генерить может, но логирования то там не будет, соответственно в рекурсию оно не уйдет, window.onerror цепляется только к конкретной открытой странице, а не на все http запросы открытого браузера.

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

Absinthe

жожо
Sender а почему ты думаешь, что логировать можно только ошибки?
Я, к примеру, js логирую для отладки. Сильно помогает сэкономить время, чтобы узнать, где ошибка.
 

Sender

Новичок
Sender а почему ты думаешь, что логировать можно только ошибки?
Я, к примеру, js логирую для отладки. Сильно помогает сэкономить время, чтобы узнать, где ошибка.
где я говорил что "логировать можно только ошибки"? В топике речь идет только о ошибках которые по windows.onerror ловятся и DDOS "могут" устраивать, я и пишу про ошибки. Логировать то можно все что угодно, только насколько это нужно.

> Я, к примеру, js логирую для отладки
Расскажи поподробнее что ты имеешь ввиду, мне всегда было достаточно файл-строка без трейсов для воспроизведения ошибки. Что ты еще логируешь для локализации проблемы и как? Трейс прицепляешь к сообщении об ошибки?
 

Absinthe

жожо
Логировать то можно все что угодно
И будет сотни-тысячи сообщений на страничку тогда.

Расскажи поподробнее что ты имеешь ввиду, мне всегда было достаточно файл-строка без трейсов для воспроизведения ошибки.
когда что-то происходит в JS - пишу в лог.
Изменился адрес, нажата кнопка, листнулся слайдер, какие данные к нему были приготовлены, что пошло на предзагрузку, что загрузилось, все ответы аяксов,
Позволяет понять порядок работы элементов, т.к. в асинхронном коде без этого хер разберешься.
При этом пишу только крупные события, а не мелкие, поэтому каждое действие пользователя занимает всего строк 5-20. И при ошибке отлаживаю уже обычным способом локализованный участок с ошибкой.
 

Sender

Новичок
а, ну я понял что ты имеешь ввиду под логированием js. в принципе мне хватает firebug подобных вещей для этого.


> И будет сотни-тысячи сообщений на страничку тогда.
откуда? ajax запрос отсылается только пофакту ошибки, ошибка ловится по windows.onerror.

в топике речь идет о логировании javascript ошибки посредством отправления ее на сервер. Произошла js ошибка, отправили ajax, на сервере это все сохранили, можем клиентские ошибки отслеживать. В твоем случае просто еще собранный лог отправляться должен.
 

Sender

Новичок
А можешь примерный код показать, если не очень большой?
Да там показывать особо нечего,

PHP:
window.onerror = function(msg, url, lineNumber) {
	Ext.Ajax.request({
		url: '/javascript-error-logger.html',
		method: 'POST',
		params: {
			'message': 'Error: '+msg+'\nURL: '+url+'\nLine: '+lineNumber
		}
	});
};
log4js у них там кода много потому что прибамбасы всякие, может больше браузеров охватывают. Ну и я так понял код, который на сервере отвечает за логирование, может как раз фильтруют ошибки уже. Мне просто это все особо пока не нужно, поэтому все по-простому.
 
Сверху