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
320 posts
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. ...

Configuration with Azure App Services and ASP.NET Core

Part 3 of elmah.io's ASP.NET Core series: how ASPNETCORE_ENVIRONMENT defaults to Production on Azure App Services, how to ship an appsettings.Staging.json for a staging slot, and how Azure's App Settings override nested appsettings.json values using colon-separated key paths like AppSettings:Hello. ...