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.

Catching a Server-Side Browser Cookie Support Error - Case Study

Internet Explorer CookiesAs with every new release of software, things change. And, like we all expected, there wasn't an exception to that rule when Microsoft introduced Internet Explorer 10 into the mix.

Everyone coding for the web had the normal things to worry about, of course, like design formatting, speed, and support, but one of our clients experienced something that would have taken a long time to catch if they hadn't been using Exceptionless' real-time error reporting.

Who Adopts New Versions of IE Right Away, Anyway? #

Like many, the client's web team doesn't necessarily adopt the latest version of IE right away, much less use it as their main browser. Unfortunately, that leads to little immediate exposure to potential bugs.

Lets explore how this came back to bite them, and how Exceptionless helped them treat the wound quickly.

A nasty customer-facing error #

Users of the client's eCommerce platform that were already using IE10 were able to view and use the website fine, until they logged in. At that point, everything broke. They couldn't checkout, browse, or submit contact forms.

Because the team wasn't using IE10 regularly yet for testing actual logged-in user transactions, they were clueless!

Luckily, Exceptionless reported the customers' errors and the team was able to take notice of the recurring bug within days, rather than weeks or months.

Turns out... the problem was server-side! #

After the error was reported in the Exceptionless Dashboard, the team was able to use the attached details to trace the root of the issue back to the server's definitions of which browsers support modern cookie encryption.

All the server needed was a routine update that had not been performed! Bam - fixed.

Another bug bites the dust #

We love to hear stories like this. Something so simple, yet so easy to overlook and cause serious customer-facing problems!

Errors like this happen every day to hundreds, if not thousands, of small, medium, and large software teams across the world. We just want to help squash as many of them as we can!

An In-Depth Look at the Exceptionless Project Portal

We cover the basic features of the Exceptionless platform on our feature tour page, but we wanted to give everyone a deeper look into all the information available via the web-based, real-time .NET error reporting admin area.

Continue reading to learn more.

The Dashboard #

Visual .NET Exception Graph

The Exceptionless Dashboard features a quick overview of the exceptions for the currently selected project. It also updates in real-time, so you can watch exceptions roll in.

This is a great place to glimpse your exceptions by total, unique, new, or per hour. The most frequent and most recent exceptions are also displayed here, along with a graph representing your total and unique exceptions. You can go directly to an error's details by clicking on it.

At the top of the page, throughout the admin, you can:

  • Change the project you are currently viewing
  • Go to that projects settings
  • Adjust the date range
  • Show/Hide hidden errors
  • Show/Hide fixed errors
  • Show/Hide "Not Found" errors

Exceptionless Date Range Selector

Show/Hide Errors & Select Date Range

View Most Recent, Most Frequent, and New Exceptions #

On the left side of the dashboard, you can select to view your Most Recent, Most Frequent, or New (first time) .NET exceptions.

New .NET Exceptions

New Errors

Most Recent #

The most recent report lists your errors individually with the one that occurred last at the top. It also tells you exactly how long ago the error occurred. You can click into the exception to view details.

Most Frequent and New Exceptions #

Each of these reports lists the respective error type with a summary, the count, when the error first happened, and the last occurrence. Most frequent is ordered by count, and new is ordered by most recent.

Lets Take a Look at Exception Details #

Error Stack Page #

Error Stack Options

If you click into any error, Exceptionless will show you the error stack, which includes the number of occurrences, when it first happened, and the latest re-occurrence. You can adjust the date range on this page, like the rest, and you also get a nice graph of that error's occurrences over time. Each individual time the error triggered is listed below the graph, and you can click into each instance separately.

Before we do that, though, I'd like to point out another major feature of the error stack page..

Above and to the right of the graph are two buttons: "Mark Fixed" and "Options". Mark fixed is exactly what it sounds like, and if you click on the "Options" button it drops down with the following choices:

  • Hide from reports
  • Promote to external
  • Add reference link
  • Disable notifications
  • Future occurrences are critical
  • Reset stats

Individual Error Details #

After you click into an individual error instance, you will see the following tabs.

.NET Exception Environment Details

Error Overview

This page shows you a quick overview of the error, including the stack trace. It includes the date and time, type, message, platform, URL, and referrer. You can also go to the previous or next occurrence.

Exception

This tab displays a few overview details, then gives you a list of loaded modules related to the error.

Request

The request view gives you the request details, including date and time, http method, url, referrer, client IP, user agent, browser, browser OS, device, and whether or not it's a known bot. You also get Post Data.

Environment

Because you needed all the data, the environment tab displays time and date, machine name, ip address, processor count, total, available, and process memory, OS name, OS version, architecture, runtime version, process ID, process name, and command line details. It also has client information, such as install date, version, platform, submission method, application starts, and errors submitted.

What Else Can I Do from the Admin? #

Naturally, you can manager your projects, organizations, and account, but we also have pretty handy feedback and support tools so you can let us know how we're doing! Your feedback and comments are important and provide direction to the code.

Exceptionless Support

In short, the tool offers extremely helpful insights into the world of your web application's bugs. Whether internal or customer-facing, knowing when, where, and how many exceptions are being generated makes it easier for you to track them down and squash them. And when you've fixed it, regression notifications are there to let you know if it rears its ugly head again.

Still not convinced? Give it a try - sign up today, for free.

Find Leaking Exceptions by Eliminating Empty Catch Blocks - Case Study

How a client eliminated 50+ exceptions/hour #

Recently, a client contacted us and gave us a pretty incredible case study. He found a huge number of "leaking" exceptions by eliminating all of the empty catch statements in his ASP.NET code and sending an exception to Exceptionless instead. By doing so, he was able to track down about 12 individual bugs and get rid of over 50 exceptions per hour by fixing them. That's 1200+ exceptions per day - gone!

"This gave us a picture of just how many poorly written methods were leaking exceptions. The answer was, A LOT. So, even though these weren't customer facing, they were expensive and a good indicator of code quality. In just a couple of days, we were able to eliminate the majority of them completely." - Eric Burcham

After speaking with Mr. Burcham further, he explained that while there were only about 12 individual bugs, the number of times that those bugs were occurring in different areas throughout the code (an ASP.NET eCommerce solution) was numerous. Luckily, he was able to use several multi-line find and replace actions to make all the changes relatively quickly and get things back on track.

A brief code example #

Empty .NET catch blocks #

Before using Exceptionless to generated exceptions, the catch blocks were empty.

try
{
// Do Something
}
catch { }

Using Exceptionless to generate an exception in the catch block #

By submitting an exception in the catch block, instead, their eyes were opened to thousands of daily exceptions.

try
{
// Do Something
}
catch(Exception ex)
{
ex.ToExceptionless().Submit();
}

But I can already throw an exception in my catch block... #

While you can throw an exception in a catch block normally with .NET, Eric was able to utilize Exceptionless' intelligent error grouping, notifications, and detailed reporting to pinpoint the problems and deal with them accordingly. Then, he was able to monitor the decline of occurrences and make sure that there were no regressions. That's pretty powerful, we think.

.NET Exception Reporting and Why You Need It

We have all worked on projects, large and small, where tiny, one-off bugs went unnoticed for a while before they were finally reported by a user or discovered by a developer. In some instances, these bugs probably affected the end-user's ability to use the service, purchase an item, etc, meaning that there was a direct impact on the bottom line.

What if you didn't have to worry about .NET exceptions going unnoticed anymore?

Enter real-time .NET exception reporting #

Exceptionless ASP.NET Error Reporting

What .NET developers needed was a tool that focused on error reporting by logging, grouping, and sending notifications. They needed flexibility through custom objects and a fluent API. They needed every error detail presented in a organized, readable manner. The even needed charts that clearly showed their progress in squashing the tens, hundreds, or thousands of daily exceptions that they didn't know they were occurring.

We needed all that, too, so we built a tool that does it all for us!

What a .NET exception reporting tool has up its sleeves #

When we set out to build Exceptionless, we went through hundreds of possible features, and even toyed with building a larger product that including other functionality, but in the end we decided we wanted it to do the following things really well.

  • Send error notifications
  • Group exceptions intelligently into stacks
  • Show top errors and allow them to be prioritized
  • Provide detailed error reports, including stacktrace
  • Have a dashboard with an immediate view of error statistics and trends
  • Allow custom objects to be added to reports
  • Allow unlimited users per organization
  • Give developers a way to **mark exceptions critical, fixed, or **monitor for regressions
  • Provide real-time updates, as exceptions happen
  • Support offline usability in scenarios where the developer is traveling, etc
  • Be able to be installed in less than 5 minutes

Why Exceptionless is a must-try for .NET developers #

You should give it a shot if:

  • Finding that bug 2 weeks sooner could have saved you or your company a lot of money
  • Customers were lost because of a bug on production that you couldn't see locally or in the development environment
  • You fixed a bug in one spot, only to find out that it was happening in several other places as well
  • There might be errors here or there, but they probably aren't affecting very many users (hint: they probably are).
  • You or your team are making a lot of changes in the next sprint, and you really want to make sure you know when a bug gets introduced
  • and the list goes on...
And of course, we're here to help!

If you have any issues or questions, just let us know! You can contact us here on the website, or via the support button on your Exceptionless dashboard.