TraceMyCode – сервис для отслеживания ошибок

в 4:18, , рубрики: .net, exception, logging, php, ошибки, я пиарюсь, метки: , , , ,

TraceMyCode – сервис для отслеживания ошибокНесколько лет назад, заканчивая очередную программу для сенсорных столов, наша команда столкнулась с проблемой поддержки нескольких устройств, размещенных в разных местах. Необходимо было отслеживать возникающие ошибки в программе и оперативно их исправлять. Но все это усложнялось большим количество устройств, проверять каждый из них было не рационально.

Тогда мы написали небольшой веб-сервис, который мог принимать и сохранять информацию об ошибке в приложении. Достаточно длительное время этот сервис работал только в рамках компании и за это время применялся практически в каждом проекте.

Пару месяцев назад появилась идея доработать сервис до приемлемого вида и позволить им пользоваться каждому разработчику.

В общем

В итоге получился максимально простой проект TraceMyCode.net. Сейчас он может предложить следующие функции:

  • Прием и сохранение информации об ошибке через REST веб-сервис;
  • Просмотр произошедших ошибок;
  • Уведомления по email и push (push – для пользователей iOS);
  • Неограниченное количество ваших проектов и пользователей в каждом.

TraceMyCode – сервис для отслеживания ошибок

Вариантов его использования много. Существует всего одно требование: у программы должен быть доступ в интернет, чтобы отправить сообщение об ошибке. Например, наша компания сейчас использует для следующих типов приложений:

  • Сайты на ASP.NET и ASP.NET MVC;
  • Desktop-приложения;
  • Мобильные приложения для iOS и Windows Phone.

Как подключить к приложению

Для начала, необходимо зарегистрироваться и создать первый проект. На странице проекта указан уникальный идентификатор для приложения (Client ID).
Для отправки информации об ошибке, вашему приложению необходимо выполнить всего лишь один HTTP запрос:
POST tracemycode.net/api/errors

Веб-сервис поддерживает прием данных как в XML, так и в JSON формате. Чтобы указать, в каком формате вы отправляете данные, необходимо установить следующие значения для заголовков “Content-Type” и “Accept”:

  • Для XML: “text/xml” или “application/xml”;
  • Для JSON: “text/json” или “application/json”.

Сами XML или JSON данные необходимо отправить в теле запроса в кодировке UTF-8. Не буду приводить полное описание каждого из параметров, документация доступна здесь. Лучше приведу примеры.

Пример для 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 ответа означает:

  • 201 – ошибка успешно зарегистрирована;
  • 400 – ошибка в распознавании данных запроса.

Если вы получили код 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 мы уже создали готовые библиотеки, которые позволяют значительно упростить процесс отправки информации об ошибке.

.NET Framework

Скачайте библиотеку и подключите ее к вашему проекту. Сама библиотека очень маленькая, для нее требуется только .NET Framework 4.0. При возникновении ошибки необходимо просто вызвать статическую функцию:

try
{
	// TODO: логика приложения
}
catch (Exception ex)
{
	TraceMyCode.ErrorProxy.Submit(new Guid("projectId"), ex);
	// projectId – уникальный идентификатор для приложения (Client ID), полученный на сайте
}

В большинстве случаев информацию об ошибке нужно отправлять в глобальном обработчике для приложения, когда на более ранних этапах не получилось ее обработать. На странице документации есть описание, как это сделать для нескольких типов приложений: консольное, ASP.NET, WinForms, WPF.

PHP

Для PHP 5 мы тоже написали готовые функции. Скачайте файл и подключите его к проекту:

require_once("Includes/traceMyCode.php5.php");

По аналогии с предыдущей библиотекой, для отправки информации об ошибке, вам необходимо вызвать 1 функцию:

try {
	// TODO: echo inverse(0) . "n";
} catch (Exception $exception) {
	TmcErrorProxy::SubmitByException('projectId', $exception);
	// projectId – уникальный идентификатор для приложения (Client ID), полученный на сайте
}

Подробнее можно прочитать на странице документации для PHP.

Опубликовано по просьбе пользователя Zorro (недостаточно кармы для публикации в блоге «Я пиарюсь»).

Автор: ido

Источник

Поделиться

* - обязательные к заполнению поля