Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Обработка ошибок клиента на сервера / 11 сообщений из 11, страница 1 из 1
09.07.2015, 12:37
    #39003292
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
Добрый день !
Нужен совет по поводу следующего решения :
Есть jetty веб сервер , есть клиентский js .

Этот javascript тестируют, но все равно , иногда в нем могут возникать ошибки ... о которых мы можем узнать только от пользователей...

вопрос как мониторить на сервере ошибки которые возникают на клиенте ?

Читая Носорога , нашел такую древнюю JS фичу window.onerror

Которая способна обработать все что не попало в try/catch в js

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
window.onerror = function(msg, url, line){

var onErrorForm = {};
onErrorForm.msg = msg;
onErrorForm.url = url;
onErrorForm.line = line;

 console.log(onErrorForm);

    var url = "/onerror";
    jQuery.ajax({
        type: 'GET',
        dataType: "json",
        url: url,
        data: onErrorForm,
        success: function(data, status) {
        
        },
        error: function() {
        }
    });

}



Далее на сервере все это кладем в базу , или в лог и выводим в админку, пишем письма разработчиками js итд


1.Вопрос может есть более красивое решение ?

2.Насколько это решение приемлемое ?

3.Есть ли у него подводные камни?
...
Рейтинг: 0 / 0
09.07.2015, 13:09
    #39003342
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
Atum1, стек трейса не будет. Вот пример:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<html>
<head>
<script>
window.onerror = function (message, filename, lineno) {
	console.log("message: " + message);
	console.log("filename: " + filename);
	console.log("lineno: " + lineno);
};

var someObj = {
	someMethod: function() {
		someFunction();
	}
}

function someFunction() {
	throw new Error("Some error!");	
}
</script>
</head>
<body>
<button onclick="javascript: someObj.someMethod()">Push me</button>
</body>
</html>
...
Рейтинг: 0 / 0
09.07.2015, 13:38
    #39003389
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
А если еще будет minified и uglyfied JavaScript, то даже при

window.onerror = function (message, filename, lineno, column, errorObj) {}

разобраться во всем этом деле будет очень сложно.
...
Рейтинг: 0 / 0
09.07.2015, 13:41
    #39003400
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
yelenaAtum1, стек трейса не будет. Вот пример:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<html>
<head>
<script>
window.onerror = function (message, filename, lineno) {
	console.log("message: " + message);
	console.log("filename: " + filename);
	console.log("lineno: " + lineno);
};

var someObj = {
	someMethod: function() {
		someFunction();
	}
}

function someFunction() {
	throw new Error("Some error!");	
}
</script>
</head>
<body>
<button onclick="javascript: someObj.someMethod()">Push me</button>
</body>
</html>



Код: javascript
1.
2.
3.
message: Uncaught Error: Some error!
test.html:6 filename: file:///home/test.html
test.html:7 lineno: 17


test.html:17 Uncaught Error: Some error!

??? как не будет ??
...
Рейтинг: 0 / 0
09.07.2015, 13:43
    #39003403
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
yelenaА если еще будет minified и uglyfied JavaScript, то даже при

window.onerror = function (message, filename, lineno, column, errorObj) {}

разобраться во всем этом деле будет очень сложно.

Вы правы вот в чем :

после обфускация кода и сборки в один js разобраться будет проблематично ...
...
Рейтинг: 0 / 0
09.07.2015, 13:48
    #39003417
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
Atum1yelenaAtum1, стек трейса не будет. Вот пример:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<html>
<head>
<script>
window.onerror = function (message, filename, lineno) {
	console.log("message: " + message);
	console.log("filename: " + filename);
	console.log("lineno: " + lineno);
};

var someObj = {
	someMethod: function() {
		someFunction();
	}
}

function someFunction() {
	throw new Error("Some error!");	
}
</script>
</head>
<body>
<button onclick="javascript: someObj.someMethod()">Push me</button>
</body>
</html>



Код: javascript
1.
2.
3.
message: Uncaught Error: Some error!
test.html:6 filename: file:///home/test.html
test.html:7 lineno: 17


test.html:17 Uncaught Error: Some error!

??? как не будет ??

А так не будет. Вы видите трейс в консоли разработчика. Нр он не передается в обработчик window.onerror. Не заметили?
...
Рейтинг: 0 / 0
09.07.2015, 13:50
    #39003425
Adva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
Atum1,

зависит от браузеру и обфускации кода. Например в Хроме можно передать стек на сервер.
...
Рейтинг: 0 / 0
09.07.2015, 13:50
    #39003426
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
Цепочку вызовов методов вы не видите. Откуда пошла ошибка определить не можете. Только видите место, где она произошла.
...
Рейтинг: 0 / 0
09.07.2015, 14:01
    #39003443
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
AdvaAtum1,

зависит от браузеру и обфускации кода. Например в Хроме можно передать стек на сервер.

Есть какое - то универсальное решение?
...
Рейтинг: 0 / 0
09.07.2015, 14:59
    #39003531
Adva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
Atum1AdvaAtum1,

зависит от браузеру и обфускации кода. Например в Хроме можно передать стек на сервер.

Есть какое - то универсальное решение?

К сожалению нет.
...
Рейтинг: 0 / 0
09.07.2015, 15:16
    #39003572
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок клиента на сервера
Atum1AdvaAtum1,
зависит от браузеру и обфускации кода. Например в Хроме можно передать стек на сервер.
Есть какое - то универсальное решение?
есть.
Писать сразу с try как и полагается в ЯП высокого уровня.
Я лично так пишу.
Другое дело, что сам ЯП JS позволяет к этому подходить расслабленно.
Например, эксплореры код без Try ошибки подавляют.
ЗЫ.
Стек передавать не нужно, т.к. на клиенте не пишут с рекурсиями и многими вложениями.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Обработка ошибок клиента на сервера / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]