Thomas Ardal

Thomas Ardal

Meet Thomas, the founder and developer behind elmah.io. Thomas blogs about everything technical from C# and ASP.NET Core to machine learning.

Denmark •
321 posts •
One versioning scheme to rule them all

Explains elmah.io's client library versioning scheme: the major version now tracks the API version, so Elmah.Io.Client 3.0.42 targets API v3, and dependent packages like ELMAH and log4net integrations follow suit. Packages previously at 1.x.x were bumped to 3.0.x; Logary keeps its own numbering. ...

The elmah.io NuGet package landscape

Maps elmah.io's NuGet package dependency tree, from the shared Elmah.Io.Client API wrapper up through elmah.io.core for classic ELMAH, Elmah.Io.AspNetCore middleware, Elmah.Io.Extensions.Logging, and dedicated packages for NLog, log4net, Serilog, Umbraco, and Logary. ...

ASP.NET Core Routing Tutorial

Part 6 of elmah.io's ASP.NET Core series, covering the Microsoft.AspNetCore.Routing package and UseMvc's default route template {controller=Home}/{action=Index}/{id?} in Startup.cs. Explains inline default values, optional parameters marked with a question mark, and route constraints like {id:int}. ...

Larger plan available

Announces that elmah.io renamed its former top-tier Enterprise plan (100k monthly messages) to Business+, freeing the Enterprise name for a new, larger plan with more storage. Existing Enterprise customers moved to Business+ automatically, with identical features besides message allowance. ...

Contributing Quick Fixes

Explains writing custom Quick Fixes for elmah.io's Fix tab by forking Elmah.Io.QuickFixes on GitHub and subclassing QuickFixBase in C#. Walks through an example, ImATeapotDocumentationQuickFix, whose CanFix method triggers on HTTP status code 418. This feature has since been discontinued. ...

Testing software is hard

Describes elmah.io's three-tier test strategy: unit tests with NUnit, Moq, and AutoFixture with no fixed coverage target, integration tests covering microservice and database calls, and full system tests through the UI and API, tracked with hand-drawn mindmaps of which features need coverage. ...

Error Logging Middleware in ASP.NET Core

Part 5 of elmah.io's ASP.NET Core series, building a custom ErrorLoggingMiddleware class with a RequestDelegate constructor and an Invoke method wrapping _next(context) in a try/catch that logs then rethrows. Shows registering it via app.UseMiddleware in Startup.cs, after UseExceptionHandler. ...

ASP.NET Core Tutorial

A hub post rounding up elmah.io's ASP.NET Core tutorial series: Startup.cs configuration, the Microsoft.Extensions.Logging framework, middleware, routing, built-in dependency injection, ASP.NET Core 2.2 health checks, and the Kestrel web server built on libuv. Links to a dedicated post per topic. ...

ASP.NET Core Logging Tutorial

Part 4 of elmah.io's ASP.NET Core series, introducing Microsoft.Extensions.Logging's provider model (like log4net appenders or Serilog sinks) and wiring up loggerFactory.AddConsole/AddDebug in Startup.cs. Covers the Trace-to-Critical log level scale and setting LogLevel.Default in appsettings.json. ...