Exceptionless Now Hosted on Azure

Microsoft AzureAs usual, we've been working on ways to improve the Exceptionless service.

Due to growing demand for our hosted error reporting plans, we decided to move everything to the Microsoft Azure Cloud platform.

We completed the move last week and, except for a few small hiccups that were quickly resolved, everything is already running faster across the board!

Benefits of Azure #

Bring on the errors! #

As our user base continues to expand, the first priority is to continue providing the best service possible. Azure allows us to guarantee scalability, and has already proven to be much faster and more responsive. We're ready for whatever you can throw at us.

Focus #

Developing infrastructure takes time, and we would rather be developing the code behind Exceptionless. The move to Azure allows us to do just that, taking a lot off our plate in terms of hosting. It's pretty awesome.

Future Azure partner #

In the future, we would like to become an Azure partner and be listed as one of the approved store add-ons. We're not there yet, because we've got to go through the application process, etc, etc, but it's in the works!

"Azure is an open and flexible cloud platform that enables you to quickly build, deploy and manage applications across a global network of Microsoft-managed datacenters. You can build applications using any language, tool or framework. And you can integrate your public cloud applications with your existing IT environment." - Microsoft Azure

We are happy with the move and think it means great things for the future of Exceptionless. We hope our users appreciate the speed and responsiveness, and can see the improvements in service.

Detailed Error Reports - What's Included?

When an error occurs in your app, you need to know the critical details, fast, so you can drill down and fix it. We get it - we're developers too - that's why we built Exceptionless.

The trick was organizing the data so it didn't overwhelm our users, while still providing all the important stuff so developers wouldn't have to spend extra time tracking down versions, requesting stack traces, or pulling teeth to get environment information.

Lets take a look at the default information included with every error. We say default because you can easily add your own information with custom objects.

Each Error Occurrence #

Every single error occurrence has the following tabs:

  • Overview
  • Exception
  • Request
  • Environment

On each of these, you can go to the previous or next occurrence for easy comparison.

Lets take a closer look at each tab.

Error Overview #

Exception Reporting Overview

The overview tab holds general information for that occurrence, including the variables below. Sometimes this is all you'll need to track down the bug. Sometimes you'll need to dig deeper.

  • Occurred On
  • Error Type
  • Message
  • Platform
  • URL
  • Referrer
  • Browser
  • Browser OS
  • User Name
  • Stack Trace

Exception Tab #

Exceptionless Exception Details

On the exception tab, we reference the timestamp, error type, message, and stack trace, while also providing you with all of the loaded modules, including versions.

Request Tab

Exceptionless Request Details

Here we have tons of important request info:

  • Occurred On
  • HTTP Method
  • URL
  • Referrer
  • Client IP
  • User Agent
  • Browser
  • Browser OS
  • Device
  • Is Known Bot
  • Cookie Values

Environment Tab

Exceptionless Environment Details

Environment isn't something that we always think about, but in some cases it can tell us a lot about the exception. We've got you covered!

  • Occurred On
  • Machine Name
  • IP Address
  • Processor Count
  • Total Memory
  • Available Memory
  • Process Memory
  • OS Name
  • OS Version
  • Architecture
  • Runtime Version
  • Process ID
  • Process Name
  • Command Line
  • Client Information
    • Install Date
    • Version
    • Platform
    • Submission Method
    • Application Starts
    • Errors Submitted

How Did We Do? #

We have done our best to include all the important information in an organized, easy to read, intuitive interface. Think we're missing something? Think we can organize it differently? Let us know! We love feedback.

Exceptionless 1.4 Released

Exceptionless Version 1.4Exceptionless 1.4 brings with it both server and client changes, a new client integration, some minor updates, and lots of bug fixes. Check out the changelog items below, and let us know if you have any questions.

We want to extend our thanks again to the developers that have worked on the project since we went open source a few weeks ago. See their contributions below, along with links to their GitHub profiles.

Server #

  • The app will now be displayed in full screen mode on iOS devices (via Add to Home Screen).
  • Added the ability to view the status page while in maintenance mode.
  • Added the ability disable error processing on the error controller.
  • Various usability improvements dealing with chart date-range selection.
  • Added documentation link on the sidebar.
  • Added checks to limit the number of max results returned from various API methods.
  • Add new indexes to help performance and fix some inefficient queries.
  • Changed the way we are filtering fixed and hidden errors to be more efficient.
  • Updated all indexes to be created in the background if they don't already exist.
  • Switched the JavaScriptEngineSwitcher to use JurassicJsEngine. Jurassic has no external dependencies on IE or Windows specific libraries.
  • Fixed a race condition that would throw an exception when updating stats.
  • Fixed a bug where the EnforceRetentionLimitsAction was returning all the query results and then paging them.
  • The upgrade script now upgrades the database in a background thread.
  • Fixed a bug where an error with no stack trace wouldn't be processed.
  • Fixed a bug where the list loading indicators could spin non-stop.
  • Fixed a bug where errors could be stored with the incorrect DateTimeOffset. This caused inconsistencies between charts and list data.
  • Fixed a bug where the error stack's tags were not being synced with the error instances.
  • Fixed a bug where the terms and privacy links could point to the wrong domain.
  • Fixed a bug where a UriFormatException could be thrown when viewing an error occurrence. This could be caused by third party obfuscators that create a new pdb file.
  • Updated the UpgradableJsonMediaTypeFormatter to handle errors gracefully.
  • Fixed a bug where the EncodingDelegatingHandler could throw an exception when there was no request content.
  • Fixed a bug that could prevent an error from being processed.

Client #

  • Added support for Nancy (Contrib: luisrudge).
  • Better support for low trust environments (Contrib: obsbne).
  • Fixed a bug where the MVC integration could interfere with custom error pages.
  • Fixed a bug where a batch of errors wouldn't be sent if an error occurred while sending a previous error in the same batch.
  • The client will now attempt to delete an already sent error when ProcessQueue is called.
  • Fixed a bug where an exception would occur while deleting the manifest file that was saved by a different or elevated user.

Achievement Unlocked - 1000 Accounts and Over 8,000,000 Errors Reported!

8 million errors reportedJust over six months ago, we launched Exceptionless with a mission to impact the coding community in a positive way. The goal was, and still is, to help developers find, track, and squash errors, ultimately creating better code for users.

A few days ago we officially hit 1000 accounts, and as of today Exceptionless has reported 8,562,499 errors! We couldn't be more excited!

Sure, we're busier than ever now, answering emails, conversing with open source contributors on new features, and working on new features ourselves, but seeing something grow this quickly, that we've put so much work into, leaves us with little room to complain. The only real thing we can do is say thank you.

Thanks #

We'd like to thank all of our users for using the service, providing feedback, asking the hard questions that make us realize we need to make tweaks here and there, and providing us with direction.

Also, we would specifically like to thank our beta testers that were with us from the beginning. You know who you are, and without you Exceptionless simply would not be the tool it is today.

And, of course, we have to thank everyone that has contributed to and forked the project since we went open source a few weeks ago. 39 forks, 124 GitHub stars, and a NancyFX client so far - not bad!

But Wait, There's More! #

They say there's no sleep for the wicked, so we're feverishly working on a few major things that will have big long-term benefits for the app.

  • Moving to Azure for faster, more robust, scaleable hosting
  • Simplifying the API to make it easier for new clients to be implemented and improve metric reporting
  • JavaScript client

That's just the tip of the iceberg, of course. The to-do list is ever-growing, but we've got to start somewhere.

Let us know what you think #

If you are just now joining the Exceptionless community, let us know what you think. Love it or hate it, we want to know why and how to improve.

Happy bug hunting!

New Support for NancyFX - Thanks Luisrudge!

NancyFX LogoWe've had our first substantial pull request!

Luisrudge has become the first non-trivial contributor to the Exceptionless real-time error reporting project on GitHub, with his NancyFX integration.

If you're a NancyFX user, you can find the Nancy package in our NuGet gallery.

As a token of our appreciation, Luis received a free year of hosting! Thanks again Luis! Read more about contributing and getting free hosting below.

What's NancyFX? #

"Nancy is a lightweight, low-ceremony, framework for building HTTP based services on .Net and Mono. The goal of the framework is to stay out of the way as much as possible and provide a super-duper-happy-path to all interactions."

  • Built from the ground up (not simply a DSL on another framework)
  • Removed underlying framework limitations and feature hacks
  • Removed need to reference assemblies you don't need, keeping things light
  • Ability to run anywhere, including ASP.NET/IIS, WCF, self hosted, and any OWIN out of the box
  • Super lightweight action declarations for GET, HEAD, PUT, POST, DELETE, OPTIONS and PATCH requests
  • View engine integration for Spark, Razor, dotLiquid, SuperSimpleViewEngine, and others
  • Request path matching with advanced parameter capabilities, plus the ability to replace the path matching strategy with custom implementations for your needs
  • Easy response syntax, enabling you to return things like int, string, HttpStatusCode and Action elements without having to explicitly cast or wrap your response - you just return it and Nancy will do the work for you
  • A powerful, light-weight, testing framework to help you verify the behavior of your application
  • Content negotiation
  • And more...

Visit the website or check out the GitHub Repo for more information.

Contribute & Get Free Hosting #

We love pull requests!

Anyone that contributes a non-trivial enhancement or feature to the Exceptionless project will receive one free year of our small hosting plan.

If you are interested, please read the contributing documentation for more details regarding contributing, standards, etc.

We welcome everyone to participate in helping us build a better coding community with better apps for users everywhere.

Installing Exceptionless from GitHub

Since we officially announced that Exceptionless was going open source last week, we wanted to provide everyone with a quick and easy video walkthrough of how to get up and running locally.

It's really quick, as you can see from the below video. Below the video is also a textual walkthrough. Please take a look and let us know if you have any questions.

Please note that before contributing to the Exceptionless project, you must read and sign the Exceptionless Contribution License Agreement. Pull requests will not be accepted otherwise.

GitHub Exceptionless Getting Started Video #

Text Guide #

  1. Log in to github
  2. Install the GitHub Windows client, if you want to use the GUI. If not, you can do the rest of the steps from command line.
  3. Fork the Exceptionless repository
  4. Clone the repo to your machine (Clone to Desktop)
  5. Open your local repository you just cloned
  6. Follow the "Getting Started" section of github readme.
  7. Start StartBackendServers.bat file to start redis and mongodb
  8. Open the Exceptionles solution in Visual Studio
  9. Right click solution and select select "set startup projects"
  10. Click on "Multiple startup projects"
  11. Locate Exceptionless.app and Exceptionless.SampleConsole and change them to "Start"
  12. Rebuild the solution to pull down the NuGet packages
  13. Start Debugging
  14. A console app and Internet explorer instance will start
  15. Go to the browser and create a (sample) account. This will create a sample organization and project.
  16. You will be redirected to the dashboard for the new project
  17. Go back to the console app and hit 1. A new error will be generated and your Exceptionless dashboard should reflect the error in real-time.
  18. Now, after you make any changes or updates, you will want to do a pull request.
  19. To do so, commit working, tested changes to the project.
  20. Then, sync the changes
  21. Go back to github and click on the green compare, review, or create a pull request icon.
  22. Review the updates and make sure the pull request includes the proper changes.
  23. Click "Create a Pull Request"
  24. Add any comments relevant to the pull request. Details are great!
  25. Click "Send Pull Request"
  26. The Exceptionless Team will review the request and merge it into the project, provide feedback, etc.

Please let us know if you have any questions. Happy coding!

Fork Us! Exceptionless Goes Open Source

GitHub OctocatIt's a big day at Exceptionless.

We are super excited to announce that we are open sourcing the Exceptionless code! That's right, now you can hack on our real-time error reporting tool yourself.

Too many apps are throwing too many errors out there, resulting in confused users, lost business, and endless frustration.

We believe Exceptionless can help the development community become more in-tune with their code by making those errors more transparent, trackable, and squashable. More importantly, we want to support developers building and shipping better code for their users.

Cool, Where Do I Start? #

Check out the Exceptionless Github Repository, and make sure to read about contributing if you plan on helping us improve the project.

You'll find instructions on getting started there, including setting up your hosting environment if you want to host things yourself. If you would rather host with us, we offer easy and affordable plans.

If you have a feature request or issue, let us know on the issue tracker. We are 100% committed to supporting the project.

Why Open Source? #

In short, we want to see what the community can do with our baby, which we consider a great development tool. The open source movement has provided innovation throughout the industry, and we cannot tell you how excited we are to be a part of it.

We hope you will take it, add to it, suggest great new features, and report bugs, but most of all we hope you will use it to build better apps for the world.

The Exceptionless Team will continue to work on a road map of features and improvements, all while providing support to developers that want to contribute.

Planned features/enhancements #

  • Refactor client so that the base client is a PCL library thus supporting WinRT and Mono.
  • Implement search features using ElasticSearch.
  • JavaScript client for reporting client side errors.
  • Refactor the API and UI to be completely separate layers and rewrite the UI as a SPA app using AngularJS.
  • Add a server side plugin system that allows new functionality to be easily added like HipChat notifications.

Ideas for the community #

These include just a few of feature requests, etc, that aren't in the team's immediate pipeline that you might consider tackling.

  • Clients for Ruby, Java, Python, PHP, etc
  • Ability to log non-exception data
  • Teams within organizations
  • Bookmarks

Lets make something awesome #

We have spent a lot of time on Exceptionless, but together with the community we can take it to the next level. Check out the GitHub repo today, and happy coding!

Watch out, exceptions!

Exceptionless 1.3 Released

Exceptionless 1.3 brings with it both server and client changes, including open sourcing the project (which we're super excited about!), some minor updates, and a few bug fixes. Check out the changelog items below, and let us know if you have any questions.

Server #

  • Open sourced the server under the GNU Affero General Public License, Version 3.0!
  • Extended data key names are now shown with friendly formatted name.
  • Summary notification emails that were not sent out and are older than two days will be ignored by the email job. This will help prevent users from being spammed in some circumstances.
  • Fixed a major application start up performance bug that had to do with dependency injection.
  • Fixed a bug that was causing the key-up event to be cancelled on every page that had a chart. This affected modals from working properly in some scenarios.
  • The following improvements were made specifically to make local development and internal deployments easier.
    • Added the ability to add or remove a user from the admin role.
    • When you are running exceptionless in development mode and you are the first user to signup for an account; a new sample project with a sample api key will be created.
    • When billing is not configured, all new organizations will be placed in an unlimited plan.

Client #

XML Parsing Exception Caught and Fixed - Case Study

This is yet another story of an elusive bug that, without a proper error reporting service, would have gone un-noticed for a very long time.

When third-party software and services interact with your code, in any way, you have to be wary that their data may be different from yours. In this instance, our client was parsing some XML that included an unfriendly cookie name. Lets see what happened next...

.NET Exception Dashboard

Killer Cookies #

Listrak is a pretty cool company that provides, among other things, a robust email marketing, shopping cart abandonment, and welcome series suite of tools.

One of their cookies uses a "$" in it's name ($ListrakFoo or similar). When the client's XML Config packages were executed, that $ was causing an XML parsing exception.

That's not customer facing. What's the big deal? #

37,000

While not directly customer facing, it was happening on almost every page of the website and occurred something like 37,000 times in the span of it's existence.

Sluggish

Along with the sheer number of occurrences, it was also noticeably slowing the site down.

The fix #

The fix was relatively simple. The client now checks for "$" in cookie names within the affected method and just doesn't handle them.

Tracking errors like this is what we're all about. There are hundreds of thousands, probably even millions, of bugs out there right now that throw exceptions every day but manage to remain hidden in the shadows of code written by professional developers.

It's not a sign of poor programming, it simply comes with the territory. You will have bugs, big and small, in every project you work on. The difference is, with Exceptionless, you can actually be aware of, and fix, them!

Another bug bites the dust, thanks to help of Exceptionless' real-time exception reporting!

Do you have a story where our software helped you track down and squash an elusive error? Let us know! We'll publish the details and link back to your app, if you like.

Receive Error Notifications from Your App via Email

Maybe you've got this awesome new web app that you're ready to go live with, or maybe you're working on a project that is already customer facing but you've got major new features rolling out and want to make sure all goes well.

We both know there's going to be something that isn't completely right after launch. It might be a big bug stopping certain users from placing orders on your site, or it might be something that won't even affect your customers. It might be highly visible, or completely hidden from your view. Either way, you want to know when that error occurs and what the details are. That's where Exceptionless comes in.

Real-Time Error Notifications via Email #

ASP.NET Error Notifications

The Exceptionless platform provides a great real-time dashboard view of your errors, but our email notifications allow you to be absolutely in touch with any errors that may be occurring within your application.

Notification options #

There are several email notification options for your app's exceptions.

To receive notifications, you need to turn them on under the "My Account" section, in the "Profile Information" tab. This option should be on by default. Then, you can view the below options under the individual project settings by clicking on the cog/gear icon next to the project name at the top of your dashboard.

Email Notification Settings

Lets take a look at the different options:
  1. Daily Project Summary
    This is simply a summary of your project, including error counts, etc, that you can receive each day.
  2. Critical Errors
    You can mark an individual error as critical, and then check this box to receive email notifications each time that error occurs.
  3. Error Regressions
    If you have marked an error as fixed, you can check this to get an email notification if it ever rears it's ugly head again.
  4. Error Occurrence Notification Frequency
    These are fairly self-explanatory. How often would you like to receive emails?

    1. All Occurrences
    2. New Only
    3. Never

_Note: _You can also turn notifications off for individual errors by going to Options>>Disable Notifications while inside a specific error.

Sit back and relax #

... until an error notification comes in, that is. Then you should probably fix it.