User Spotlight, Plus Fun Stats - Thank You to All of Our Awesome Users!

Exceptionless Growth StatisticsThis month (Aug, '15) we will surpass 5 MILLION EVENTS PER MONTH!

That's pretty huge, so we thought we would celebrate by highlighting a few of the awesome companies that use Exceptionless and throw out a some pretty cool statistics we dug up from the database.

If your company isn't on this list, don't worry - it's not because we don't love you! If you would like your company highlighted on the website, simply send us an in-app message explaining how Exceptionless has helped you squash bugs and improve your development.

Fun Stats #

  • Nearly 2000 ACTIVE projects
  • More than 1350 ACTIVE organizations
  • Right at 100 new organizations and 140 new users per month!
  • 800,000 new events each month, month over month - 4,600,000 total in July!

A Few of Our Awesome Users/Companies #

User Report #

userreport_logo_cmykUser Report is an online survey and feedback tool used to collect information about and from website visitors. The data User Report's tools identifies is useful in usability studies, helps websites better identify their demographics, gives users an easy way to provide feedback, and more. The company's solutions are used by ebay, Toyota, National Geographic, and other large national and international brands.

Visit the User Report website to learn more.

eMarketer #

eMarketerLogo-blackUsed by Facebook, MasterCard, and other large worldwide brands, eMarketer provides insights into the digital marketing world by providing customers with the information they need to run their business effectively and efficiently online. This information includes industry-specific research, insights, and benchmarks.

"Exceptionless allows us to prioritize fixes smarter by showing frequently occurring errors. In real time!" - Ryan Hoffman, eMarketer

Actipro Software #

PageHeaderCompanyLogoActipro Software provides industry-leading .NET user interface controls for a variety of frameworks, including WPF, WinRT, Silverlight, and WinForms. They are known for their syntax-highlighting code editor control, SyntaxEditor, among other things.

.NET developers should definitely check out Actipro Software.

Beth Israel Deaconess Medical Center - Harvard Medical School Teaching Hospital #

BIDMC is one of the nation's preeminent academic medical centers focusing on excellence in clinical care, research, and education.

header_logo

"The primary reasons that we switched to Exceptionless from our own code is that Exceptionless captures additional detail (including code line numbers), Exceptionless has a better interface and design for reviewing and managing errors and bugs (including summary views that we didn’t previously have), and we no longer need to maintain our own error-logging code." - Philip Dickerson, BIDMC

LegalDesk #

legaldesk.logoLegalDesk is software designed for managing law firms or independent legal practices and includes everything from document organization and sharing to timesheets and finances/billing.

Check out LegalDesk's Website (Italian)

CodeSmith Tools #

codesmith-tools-largeCodeSmith Tools is a Dallas-based software development company focused on creating software tools that increase developer productivity. Their flagship product, CodeSmith Generator, has seen huge success over the years as a template driven source code generator that automates common application source code creation for text-based languages. They also provide a variety of frameworks for generating proven architectures.

Learn more about CodeSmith Generator or CodeSmith's other Frameworks.

IKA #

imagesXIKA is a laboratory equipment maker in the research and development field that builds innovative magnetic stirrers, mixers, overhead stirrers, shakers, homogenizers, mills, rotary evaporators, calorimeters, laboratory reactors and the specially developed software for analysis applications.

"I’m using Exceptionless to report bugs /crashes which I encounter routinely while testing the UI. It helps me zero in on what could be the issue, AND have a documented track of what all errors I’ve seen... I’d say that Exceptionless helps me find all the bugs which I’d have to spend more time on zeroing in on, faster." - Bharat Mallapur, IKA

Want to learn more, visit IKA.in.

Teamaton #

logo-tagline-teamatonTeamaton is a small software development company focused on creating user-friendly and profitable web applications for its clients using .NET technologies.

Right now, Teamaton is working on an intuitive time tracking tool where they have implemented Exceptionless to monitor errors during development.

Learn more at Teamaton.com.

The Agileist #

the-agileistThe Agileist is a development company based in Kansas City that specializes in Azure web development, systems development, and systems integration in an agile environment.

TheAgileist.com

Thanks Again! #

Once again, we'd like to extend our thanks to all the awesome users we have that make Exceptionless such a great project to work on and use. Everyone has provided excellent feedback, allowing us to continue pushing towards a faster, more efficient, more effective solution for all your error and event reporting needs.

Self Hosting Exceptionless - Free and Fast!

Self Hosting Exceptionless

Self hosting allows you to run your own instance of Exceptionless, our real-time error, feature, and log reporting tool, on your own systems - FOR FREE!

Not Just Free, but Fast! #

When developing Exceptionless 3.0, we put extensive focus on making self hosting much easier, and therefore more viable, for our users.

It is now possible to get a test environment up and running on your local machine in only a few minutes, and production environments can be set up very quickly as well.

Or continue reading for more information and a demonstration.

How Easy? Super Easy! #

Demo Time! #

Getting your self hosted instance of Exceptionless up and running is super easy. In the video below, Blake does the entire install on his local machine and is sending events to Exceptionless in less than 2 minutes!

Please note that you should review the requirements on the Self Hosting Documentation page before installing your own instance.

We're Always Improving #

Exceptionless has come a long way, and it's only going to get easier, faster, and more robust moving forward. Our users are a huge part of that, so please submit an issue on GitHub or send us an in-app message if you have any feedbacks, bugs, installation questions, etc. Thanks!

Exceptionless V3.0 - Changes to the Build Process, Dependencies, and Self Hosting

version-3-featuredVersion 2.0 was a pretty big rewrite for us, and we're happy with how everything played out, but that doesn't mean we're done!

We've been working on 3.0, and it's ready.

What was the focus, you ask? To make life easier for you! We've simplified the build process, removed dependencies, and drastically improved the ease of self hosting.

Check out the details, below, and upgrade today!

Removed Dependencies #

Previously, MongoDB was a major dependency that increase the complexity of the overall project. All the data previously hosted in MongoDB is now hosted in ElasticSearch, making it super easy for users to self host or develop Exceptionless since you only need to set up ElasticSearch (which you had to do anyway).

With this, Redis is no longer configured by default, but you can set it up easily by setting the connection string. We definitely recommend using it.

Removal of the MongoDB dependency brings us one step closer to running Exceptionless on vNext, on any operating system. We hope to achieve this soon, but do not have a timeline.

Easier Self Hosting #

The goal is to make self hosting as easy as possible so anyone can set it up and try Exceptionless out.

With Exceptionless 3.0, we now have a single build artifact that contains bo the SPA app and the API end server, with default configuration. The ZIP file contains a batch file you can run to download and start ElasticSearch, launch IIS Express with a temp website, and load your browser automatically with the Exceptionless test instance. This lets you load up everything and play around with Exceptionless in a single click!

Another change to the configuration is that you now have the ability to set every Exceptionless API Setting via Environmental Variables.

Check out the documentation for detailed Self Hosting Configuration docs.

Simplified Build Process #

In order to make it easier and faster to deploy, we removed the OctopusDeploy build dependency and are now using Azure Git deploy, which pulls directly from a GitHub repository that contains the build artifacts.

With this move, our mindset changed regarding the master branch. For us it means production, but for you it means that whatever is in our master branch is stable and currently deployed to live. We no longer have to wait for a build to complete, create a production release in OctopusDeploy, then manually deploy it, we just commit to git and the rest is history!

Expect more on this topic from us soon. In the mean time, enjoy the simplified build process.

Upgrading to 3.0 #

The only users that need to worry about upgrading anything for this new release are self hosters. If you are self hosting Exceptionless, please review the Self Hosting Documentation, which contains information about upgrading your existing install.

So What? #

Well, what all this means for you is that we will be able to update things much quicker, and that life just got way easier for all you self hosters out there!

Let us know what else we can do to make life easier for you.

Introducing Foundatio - Pluggable Foundation Blocks for Building Distributed Apps

Exceptionless Foundatio App Building BlocksIn the process of developing Exceptionless, we realized there was a lack of good, simple, open source solutions for caching, queues, locks, messaging, jobs, file storage, and metrics when building scaleable applications.

We tried an open source Redis cache client for caching, but it went commercial (expensive) and there wasn't any in-memory implementations. For the message bus, we looked at NServiceBus (good product, high cost, not open source friendly) and MassTransit (local setup a pain, Azure support lacking), but were left disappointed. For storage, we simply could not find a solution that was decoupled and supported in memory, file storage, or Azure Blog Storage.

So, naturally, we built our own!

Meet Foundatio - your key to painless, scalable development and testing for your app! Let's take a look at some examples, below.

Using Foundatio #

To start using Foundatio for your project, simply get the appropriate package from NuGet.

Below are small examples of what is possible with Foundatio caching, queues, locks, messaging, jobs, file storage, and metrics. We hope you find these explanations and samples useful, but please let us know if you have any questions or comments.

Caching #

Foundatio provides four cache implementations, all derived from the ICacheClient interface, that save you expensive operations when creating or getting data by allowing you to store and access the data super fast.

These implementations include InMemoryCacheClient, HybridCacheClient, RedisCacheClient, and RedisHybridCacheClient. Learn more about each in the Foundatio Readme Caching section.

For Exceptionless, we use RedisHybridCacheClient to cache users, organizations, and projects, which has a huge performance boost since we don't have to serialize the item if it's in local memory cache.

Foundatio Caching Sample
using Foundatio.Caching;

ICacheClient cache = new InMemoryCacheClient();
cache.Set("test", 1);
var value = cache.Get<int>("test");

Queues #

Foundatio includes three queue implementations, each derived from the IQueue interface, for First In, First Out (FIFO) message delivery. These include InMemoryQueue, RedisQueue, and ServiceBusQueue. Read more in the queues section of the readme.

We use queues, along with Foundatio Storage (below) to queue events for Exceptionless. Using both allows us to keep payloads small and limit system load.

Foundatio Queue Example
using Foundatio.Queues;

IQueue queue = new InMemoryQueue();

queue.Enqueue(new SimpleWorkItem {
Data = "Hello"
});

var workItem = queue.Dequeue(TimeSpan.Zero);

Locks #

To ensure any resource is only accessed by one consumer at any one time, use one of the two Foundatio Locks implementations, each derived from the ILockProvider interface. These implementations include CacheLockProvider and ThrottlingLockProvider. These providers take an ICacheClient, ensuring code locks across machines. Read more on the repo.

We use locks to only run single instances of jobs (below), and more.

Foundatio Locks Sample
using Foundatio.Lock;

ILockProvider locker = new CacheLockProvider(new InMemoryCacheClient());

using (locker) {
locker.ReleaseLock("test");

using (locker.AcquireLock("test", acquireTimeout: TimeSpan.FromSeconds(1))) {
// ...
}
}

Messaging #

Derived from the IMessageBus interface, our three message bus implementations let you publish and subscribe to messages within your application. Use the InMemoryMessageBus, RedisMessageBus,or ServiceBusMessageBus implementations based on your needs. Read more about each implementation on GitHub.

Exceptionless utilizes the message bus extensively to pass messages such as events being created, stacks being changed, etc, throughout the system.

Foundatio Messaging Example
using Foundatio.Messaging;

IMessageBus messageBus = new InMemoryMessageBus();

using (messageBus) {
messageBus.Subscribe<SimpleMessageA>(msg => {
// Got message
});

messageBus.Publish(new SimpleMessageA {
Data = "Hello"
});
}

Jobs #

Run jobs by calling Run() or passing it to the JobRunner class, which allows you to easily run jobs as Azure Web Jobs. All jobs are required to derive from the JobBase class.

Around here, we use the jobs feature for processing events, sending mail messages, and more. Some jobs, such as our DailySummaryJob, which we only want to run once, also use locks (above) to only run one instance.

Foundatio Jobs Sample
using Foundatio.Jobs;

public class HelloWorldJob : JobBase {
public int RunCount { get; set; }

protected override Task<JobResult> RunInternalAsync(CancellationToken token) {
RunCount++;

return Task.FromResult(JobResult.Success);
}
}

var job = new HelloWorldJob();
job.Run(); // job.RunCount = 1;
job.RunContinuous(iterationLimit: 2); // job.RunCount = 3;
job.RunContinuous(token: new CancellationTokenSource(TimeSpan.FromMilliseconds(10)).Token); // job.RunCount > 10;

Job.exe -t "MyLib.HelloWorldJob,MyLib"

File Storage #

Derived from the IFileStorage interface, we offer three file storage implementations, including InMemoryFileStorage, FolderFileStorage, and AzureFileStorage. Read more on each in the ReadMe. Using all IFileStorage implementations as singletons is recommended.

File storage is used by Exceptionless in conjunction with queues (above), among other things.

Foundatio File Storage Example
using Foundatio.Storage;

IFileStorage storage = new InMemoryFileStorage();
storage.SaveFile("test.txt", "test");
string content = storage.GetFileContents("test.txt")

Metrics #

Our three metric implementations derive from the IMetricsClient interface and include InMemoryMetricsClient, StatsDMetricsClient, and MetricsNETClient. Get the details on the repo. Note that these implementations should be used as singletons.

Metrics are used throughout the Exceptionless system to provide insight into how the system is working and get external alerts if events are not processing or report how much load is on the current system.

Foundatio Metrics Sample
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);

Development #

If you would like to contribute to Foundatio, clone the repo and open the Foundatio.sln Visual Studio solution file to get started. Let us know if you have any questions or need any assistance.

The Future of Foundatio #

As with any development project, Foundatio is a work in progress and we will continue developing it, however it is extremely stable and used in production by various companies, including Exceptionless (obviously). The next major steps are full Async support (some implementations already have it), and vnext support.

Naturally, we want to know what you think and what we should work on next, so please let us know!

Exceptionless Documentation has Moved & Grown

Exceptionless-documentation-githubThe Exceptionless documentation has moved to GitHub!

Over the past few weeks, we have taken all the existing documentation on the docs subdomain and migrated it over to the respective GitHub repo.

We also pulled out worthy examples, demos, and tutorials from past blog posts and created pages for those, so information is in a more centralized area that is hopefully easier for our users to locate and utilize.

As new features, demos, examples, and clients come online, expect to see them added to the new documentation system and updated regularly.

Exceptionless Documentation Tour #

Primary Documentation (hub) #

github-primary-docs

This documentation contains all the documentation and details/usage for the platform's features and dashboard/ui. That includes information on project settings, security, API usage, filtering & searching, email notifications, bulk actions, frequently asked questions, how to contribute to the project, and the basic requirements to run the platform.

And, of course, you can get to the documentation for the individual clients (below) from this primary site as well.

Basically, you can always start here and branch out to whatever client or feature you're looking for documentation for.

Check it out!

.NET Client Documentation #

github-dotnet

As you may have guessed, this documentation site resides within the Exceptionless.NET repo and contains .NET-specific info, examples, demos, and tutorials for different features. If you're a .NET user, this should be where you look for examples if you're just getting started or solutions to troubleshooting problems if you've run into a snag.

View the .NET Docs

JavaScript / Node.js Client Documentation #

github-javascript

The newest addition to Exceptionless, our JavaScript / Node.js client, needs a place for documentation too! Naturally, that place is within the Exceptionless.JavaScript repo! Here you'll find JavaScript-specific details, examples, and tutorials for things like configuring the client, sending events, self hosting, RequireJS, SystemJS, TypeScript, Express, and client configuration values.

We really hope this helps users familiarize themselves with the JavaScript client and get the most benefit out of it. We know its flexibility will help a ton of developers get their apps in order.

View the JavaScript Docs

You Can Contribute, Too! #

Do you know something that could use a better example, description, or tutorial? Have you put together something that would add value for other Exceptionless users if added to the documentation? Shoot any thoughts, examples, feedback, or requests our way and we'll make sure it gets handled properly.

Exceptionless Case Study - Scientific Lab Equipment

blog-header-image-small-case-studyIt's always great to hear back from our users, whether it's a simple "atta boy" or a full page's worth of feedback.

Today we thought it would be nice to share a recent case study from one of our users that lives in the scientific laboratory and processing equipment space. Their company is a leading provider of stirring, mixing, and kneading machines, among other things, that are used by the pharmaceutical, chemical, food, paint, cosmetic, and plastics industries around the world. Neat!

"It helps me zero in on what could be the issue, AND have a documented track of what all errors I’ve seen."

The Questions #

When a user hits a certain number of sessions with Exceptionless, we shoot them a quick survey email asking them a few things that might help us improve our product and get a better feel for how our users are utilizing it's features.

In a nutshell, we ask the following:

  1. What's the number one customer-facing bug Exceptionless helped you squash?
  2. Were you surprised at the initial results of using Exceptionless for the first time? How many errors were you seeing?
  3. What is the number one internal bug you were able to track down with Exceptionless?
  4. If you had one feature you'd like us to add to Exceptionless, what would it be?
  5. What other examples or feedback do you have?

Answer Time! #

"I’d say that Exceptionless helps me find all the bugs which I’d have to spend more time on zeroing in on, faster."

The user was gracious enough to provide us with the following answers to the above general questions.

  1. "Well, since our application is not yet released to the customer, I’m using Exceptionless to report bugs/crashes which I encounter routinely while testing the UI. It helps me zero in on what could be the issue, AND have a documented track of what all errors I’ve seen."
  2. "Since Exceptionless is being used by me DURING development, it’s not surprising at all! 🙂 Maybe 4-5 bugs per day in sporadic bouts of crashes. Sometimes no bugs for a long time!"
  3. "More than ONE major bug, I’d say that Exceptionless helps me find all the bugs which I’d have to spend more time on zeroing in on, faster."
  4. "Support for snapshots (user reviewed), memory dump files is my number ONE feature request."
  5. "Will update you on this once I release to customers. But it’s nice having the confidence that Exceptionless will help me squash bugs AS they get reported, instead of having to wait for that brave customer who girdles up his loins and takes up the onerous task of finding out how to report bugs and whom to report them to! Most customers would have just cursed me and gone ahead with workarounds! :)"

How About You? Got Any Feedback? #

Consider this for a second: If every user provided 10 minutes of feedback on the products they use and love, the owners of those products/programs/tools/experiences would be able to improve them much faster and with drastically more focus and drive.

With that said... give us 5, 10, or maybe 15 minutes and answer the above questions for us in the comments below. We're no Microsoft - your voice will be heard, and any suggestions will be strongly considered/debated. Who knows - maybe we work on your feature request next!

Exclude and Protect Sensitive Data within Exceptionless

Exceptionless Data Exclusions for SecurityWe realize you may have sensitive data that could potentially be transmitted within an Exceptionless error, event, log message, etc.

In order to help make sure that information is not compromised, we have included a simple comma delimited field for data exclusions on the Exceptionless Project Settings page where you can add field names that you would like to be excluded from any error or event that is reported.

Once set, the excluded field data is discarded at the client level and never hits our servers.

Types of Data You Can Exclude #

You can exclude data from any of the following:

  • Extended Data Properties
  • Form Fields
  • Cookies
  • Query Parameters

Data Exclusion Wildcards #

To be extra careful with your data, using * allows you to specify wildcards that can be used to dictate "starts with," "ends with," or "contains."

  • string*
    Following the string with a wildcard removes any field that starts with the string from the event report.
  • *string
    If you prefix the field name with a wildcard, it will remove any field that ends with the string.
  • *string*
    Using a wildcard before and after the string means that the system will remove any field that contains the string.

Example #

Exceptionless Security

One potential example is, let’s say, user addresses. Perhaps you have multiple user addresses that may get transmitted, and you want to exclude some or all of them. Maybe you have "HomeAddress" and "WorkAddress".

To exclude only "HomeAddress" data, you would just add HomeAddress as an exclusion. The same goes for "WorkAddress."

To exclude both, you could either add HomeAddress and WorkAddress, separated by a comma, or you could use *Address if those were the only two fields that ended with "Address." If those were the only fields that contained "Address" at all, you could use *Address*.

It's easy stuff, but powerful enough to be aware of and use where possible to ensure security.

What Do You Exclude? #

We are sure you can come up with some creative exclusions for various types of sensitive data. At Exceptionless, we exclude any and all relatively sensitive data to protect our users as much as possible.

Obviously, things like passwords, credit card info, etc are encrypted, but other fields such as addresses, etc, are also relatively sensitive information that typically doesn’t need to be displayed.

What do you exclude? Do you have any feedback about this Exceptionless feature? Let us know!

The Power of Real-time Project Settings

Did you know there are customizable server/client configuration values within your Exceptionless Project's settings? Well now you do - and knowing is half the battle!

These project level settings are a dictionary of key value pairs (string key, string value). They are defined server-side and automatically pushed to the client when they are updated. Using this feature allows you to control what you send without redeploying your app, which we think is pretty cool!

You can use these client configuration settings for a variety of applications, including:

  • Controlling data exclusions for protecting sensitive information
  • Enabling / Disabling user signups
  • Turning logging on or off
  • Enabling analytics
  • Controlling information collection
  • And many more! You can send any key value pair to control whatever you like within your app.

Let's take a look at a JavaScript and .NET client usage example to get your rolling with this feature.

Adding a New Client Configuration Value #

Exceptionless Client Configuration Settings

Before we get started with more of an explanation and an example, we need to add a new key and value. To do so, we go to Admin > Projects in our Exceptionless Dashboard, select the project we are working on, then go to the "Settings" tab.

This is where we can add a "New Client Configuration," which simply consists of the key and value. For the example below, we'll add the (fictional) enableLogSubmission key and set it to true.

How it Works #

When your application first starts up, your project's client configuration settings are read (from storage) and applied.

If a setting value doesn’t exist in storage, it will be retrieved from the server after the next event submission occurs. We do this by inspecting the response headers and comparing a response header that contains the setting version. If the version doesn’t match the saved setting value then we make a request to get the setting and apply it.

It’s worth noting that we allow you to define your own default settings and overwrite them with server side settings, which we'll include in our example.

How do I use the client configuration settings? #

In the example below, we will dynamically turn on or off the log event submissions at runtime without restarting the app or logging into the server to change configuration settings.

Why, you ask? Maybe we don't care about log submission until there is a really tough issue to solve. With Client Configuration Values, we can simply turn it on only when needed.

We’ll assume for this example that we are using the enableLogSubmission key we created above to control this. This setting is made up and doesn’t have to exist server side since we will be providing a default value client side. This allows us to define it via the project settings page at anytime and change our applications behavior.

To control this we will be registering a new client side plugin that runs every time an event is created. If our key (enableLogSubmission) is set to false and the event type is set to log, we will discard the event.

.NET Example #

ExceptionlessClient.Default.Configuration.AddPlugin("Conditionally cancel log submission", 100, context => {
var enableLogSubmission = context.Client.Configuration.Settings.GetBoolean("enableLogSubmission", true);

// only cancel event submission if it’s a log event and enableLogSubmission is false
if (context.Event.Type == Event.KnownTypes.Log && !enableLogSubmission) {
context.Cancel = true;
}
});

You might notice that we are calling the GetBoolean method to check the enableLogSubmission key. This is a helper method that makes it easy to consume saved client configuration values. The first parameter defines the settings key (name). The second parameter is optional and allows you to set a default value if the key doesn’t exist in the settings or was unable to be converted to the proper type (e.g., a boolean).

.NET Helpers

Above, we used the GetBoolean helper method. In the .NET client, we have a few helpers to convert string configuration values to different system types. These methods also contain overloads that allow you to specify default values.

Helper List

  • GetString
  • GetBoolean
  • GetInt32
  • GetInt64
  • GetDouble
  • GetDateTime
  • GetDateTimeOffset
  • GetGuid
  • GetStringCollection (breaks a comma delimited list into an IEnumerable of strings)

JavaScript Example #

The same functionality above can also be achieved using our new JavaScript Client.

exceptionless.ExceptionlessClient.default.config.addPlugin('Conditionally cancel log submission', 100, function (context, next) {
var enableLogSubmission = context.client.config.settings['enableLogSubmission'];

// only cancel event submission if it’s a log event and
// enableLogSubmission is set to a value and the value is not true.
if (context.event.type === 'log' && (!!enableLogSubmission && enableLogSubmission !== 'true')) {
context.cancelled = true;
}

next();
});

Subscribing to Setting Changes #

If you would like to be notified when client configuration settings are changed, you can subscribe to them using something like the below code. This is useful when you want to update your application in real time when settings change server side.

.NET #

ExceptionlessClient.Default.Configuration.Settings.Changed += SettingsOnChanged;

private void SettingsOnChanged(object sender, ChangedEventArgs<KeyValuePair<string, string>> args) {
Console.WriteLine("The key {0} was {1}", args.Item.Key, args.Action);
}

JavaScript #

exceptionless.SettingsManager.onChanged(function(configuration)  {
// configuration.settings contains the new settings
});

Any Questions? #

These Client Configuration Values are somewhat of a hidden Exceptionless gem, but we think they are power and that many of our users can find real value in using them to control the flow of information, specifically sensitive data.

If you have any questions or comments, please let us know. As usual, we're all ears!

JavaScript / Node.js Client V1 Release Notes

Exceptionless LogoLast week we announced the V1 release candidate for the Exceptionless JavaScript/Node.js Client. This week we've got official release notes for you! Have a look.

Release Notes #

  • Client supports JavaScript and Node (Works everywhere)
  • Send your errors, logs or feature usages to your Exceptionless dashboard
  • Supports various module formats such as es6 (SystemJS/jspm), UMDRequireJS, CommonJS, or global
  • We built the Exceptionless JavaScript/Nodes.js Client with the past and future browsers in mind. Everything is testable via components injected on startup (via dependency injection), which means you can replace any component of the system to fit your specific needs.
  • Client is a full feature parity of our .NET clients, including:
    • Support for custom objects
    • Mark events as critical
    • Server side settings
    • Data exclusions
    • Plugins
    • and more...
  • Includes first class integration for third party libraries like AngularJS and Express

Usage, Examples, and more... #

Everything you need to get up and running (including contributing/developing) can be found on the Exceptionless.JavaScript GitHub repo. JavaScript, Express, TypeScript, SystemJS, and RequireJS examples can be found in the example folder. As always, you can contact us via an in-app message for help, or submit an issue on GitHub with bugs, feedback, etc. We're here to make sure you get things working properly so you can take full advantage of Exceptionless!

JavaScript & Node.js Client Version 1 Release Candidate

Exceptionless JavaScript Client

If you've been following along the last few weeks, you know we've been working hard to get the new JavaScript Client up to speed and ready for a version 1 release.

We think we're there!

Whether you're a JavaScript or Node.js user, you'll be able to enjoy the same full featured exception and event reporting platform that our primary .NET client offers, with fewer platform specific boundaries.

Sure It's Ready? #

We have been doing extensive testing over the course of the last month, which has allowed us to identify issues and inefficiencies throughout. Each of those has been addressed with several improvements and fixes, leaving us with a much faster, more stable client.

Many of the tweaks we made were related to IE9 and Node. Those issues have been resolved and things are working well now. In addition, we further increased performance by shrinking the library size fairly drastically.

Moving forward, we will just be working on bug fixes related to user-reported issues as usage picks up.

Recent Bug Fixes, Issue Resolutions, & Improvements #

  • Ensured compatibility with module formats like es6 (SystemJS/jspm) and RequireJS
  • Various IE9 and Node compatibility issues fixed
  • Decreased library size to improve performance and efficiency
  • Various other performance improvements
  • Fixed Angular integration failures with Angular Router
  • Fixed - Unable to integrate with Aurelia due to node being improperly detected
  • Changed the implementation of the InMemoryStorage to do a get instead of a get and delete
  • Unable to post events with the NodeSubmissionClient over http fixed
  • Fixed - Unit tests are failing due to transpilation

Start Using It! #

We've already released a few blog posts (linked below) that detail how to get up and running, but please visit the Exceptionless.JavaScript GitHub Repo for the most up-to-date documentation.

JavaScript Users can find installation, configuration, usage details and examples here.

If you're a Node.js user, follow this article to get set up and running.

We've also got examples/samples on GitHub for JavaScript, Express, TypeScript, SystemJS, and RequireJS.

Let Us Know What You Think #

We're suckers for feedback, so let us have it whether good, bad, or indifferent. Bugs, etc should be reported on the GitHub Issues page, but feel free to shoot us an in-app message, email, etc and let us know what you think and if you had any issues getting everything working.