- PVSM.RU - https://www.pvsm.ru -
Несколько лет назад, заканчивая очередную программу для сенсорных столов, наша команда столкнулась с проблемой поддержки нескольких устройств, размещенных в разных местах. Необходимо было отслеживать возникающие ошибки в программе и оперативно их исправлять. Но все это усложнялось большим количество устройств, проверять каждый из них было не рационально.
Тогда мы написали небольшой веб-сервис, который мог принимать и сохранять информацию об ошибке в приложении. Достаточно длительное время этот сервис работал только в рамках компании и за это время применялся практически в каждом проекте.
Пару месяцев назад появилась идея доработать сервис до приемлемого вида и позволить им пользоваться каждому разработчику.
В итоге получился максимально простой проект TraceMyCode.net [1]. Сейчас он может предложить следующие функции:
Вариантов его использования много. Существует всего одно требование: у программы должен быть доступ в интернет, чтобы отправить сообщение об ошибке. Например, наша компания сейчас использует для следующих типов приложений:
Для начала, необходимо зарегистрироваться и создать первый проект. На странице проекта указан уникальный идентификатор для приложения (Client ID).
Для отправки информации об ошибке, вашему приложению необходимо выполнить всего лишь один HTTP запрос:
POST tracemycode.net/api/errors [2]
Веб-сервис поддерживает прием данных как в XML, так и в JSON формате. Чтобы указать, в каком формате вы отправляете данные, необходимо установить следующие значения для заголовков “Content-Type” и “Accept”:
Сами XML или JSON данные необходимо отправить в теле запроса в кодировке UTF-8. Не буду приводить полное описание каждого из параметров, документация доступна здесь [3]. Лучше приведу примеры.
Пример для XML:
<ErrorData>
<Project>b4be7117-52cd-4086-89b9-6f6b21c2ca55</Project>
<Version>1.0</Version>
<Device>iPhone</Device>
<OS>iOS 6.0</OS>
<Message>Sample divide by zero exception</Message>
<Exceptions>
<Exception>
<Message>Invalid operation executed.</Message>
<Type>System.InvalidOperationException</Type>
<StackTrace>at MySampleProject.Main() in c:DeveloperMySampleProjectMain.cs:line 31</StackTrace>
</Exception>
<Exception>
<Message>Attempted to divide by zero.</Message>
<Type>System.DivideByZeroException</Type>
</Exception>
</Exceptions>
</ErrorData>
Пример для JSON:
{
"project": "8c86e8bd-b5d7-447e-b5dc-09ee1743b82a",
"version": "1.0",
"device": "iPhone",
"os": "iOS 6.0",
"message": "Sample divide by zero exception",
"exceptions": [
{
"message": "Invalid operation executed.",
"type": "System.InvalidOperationException",
"stackTrace": "at MySampleProject.Main() in c:DeveloperMySampleProjectMain.cs:line 31"
},
{
"message": "Attempted to divide by zero.",
"type": "System.DivideByZeroException"
}
]
}
Код HTTP ответа означает:
Если вы получили код 400, то тело ответа содержит XML или JSON (в зависимости от параметра “Accept”) с подробной информацией, что не так в запросе.
Пример для XML:
<Error>
<InvalidKeyName1>Error message 1</InvalidKeyName1>
<InvalidKeyName2>Error message 2</InvalidKeyName2>
</Error>
Пример для JSON:
{
"invalidKeyName1": "Error message 1",
"invalidKeyName2": "Error message 2"
}
Для .NET Framework и PHP мы уже создали готовые библиотеки, которые позволяют значительно упростить процесс отправки информации об ошибке.
Скачайте [4] библиотеку и подключите ее к вашему проекту. Сама библиотека очень маленькая, для нее требуется только .NET Framework 4.0. При возникновении ошибки необходимо просто вызвать статическую функцию:
try
{
// TODO: логика приложения
}
catch (Exception ex)
{
TraceMyCode.ErrorProxy.Submit(new Guid("projectId"), ex);
// projectId – уникальный идентификатор для приложения (Client ID), полученный на сайте
}
В большинстве случаев информацию об ошибке нужно отправлять в глобальном обработчике для приложения, когда на более ранних этапах не получилось ее обработать. На странице документации [5] есть описание, как это сделать для нескольких типов приложений: консольное, ASP.NET, WinForms, WPF.
Для PHP 5 мы тоже написали готовые функции. Скачайте файл [4] и подключите его к проекту:
require_once("Includes/traceMyCode.php5.php");
По аналогии с предыдущей библиотекой, для отправки информации об ошибке, вам необходимо вызвать 1 функцию:
try {
// TODO: echo inverse(0) . "n";
} catch (Exception $exception) {
TmcErrorProxy::SubmitByException('projectId', $exception);
// projectId – уникальный идентификатор для приложения (Client ID), полученный на сайте
}
Подробнее можно прочитать на странице документации для PHP [6].
Опубликовано по просьбе пользователя Zorro [7] (недостаточно кармы для публикации в блоге «Я пиарюсь»).
Автор: ido
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/27452
Ссылки в тексте:
[1] TraceMyCode.net: http://tracemycode.net
[2] tracemycode.net/api/errors: http://tracemycode.net/api/errors
[3] здесь: http://tracemycode.net/Help
[4] Скачайте: http://tracemycode.net/Downloads
[5] странице документации: http://tracemycode.net/Help/DotNet
[6] документации для PHP: http://tracemycode.net/Help/Php
[7] Zorro: http://habrahabr.ru/users/zorro/
[8] Источник: http://habrahabr.ru/post/169891/
Нажмите здесь для печати.