Skip to main content
Version: v1.0.0


The Arcus.WebApi.Logging package provides a way to log several kinds of information during the receival and handling of HTTP requests.

To send the logging information to Application Insights, see this explanation.


These features require to install our NuGet package

PM > Install-Package Arcus.WebApi.Logging

Logging unhandled exceptions#

The ExceptionHandlingMiddleware class can be added to the ASP.NET Core pipeline to log unhandled exceptions that are thrown during request processing. The unhandled exceptions are caught by this middleware component and are logged through the ILogger implementations that are configured inside the project.

The HTTP status code 500 is used as response code when an unhandled exception is caught. However, when the runtime throws a BadHttpRequestException we will reflect this by returning the corresponding status code determined by the runtime.


To use this middleware, add the following line of code in the Startup.Configure method:

using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;
public class Startup{    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)    {       app.UseMiddleware<Arcus.WebApi.Logging.ExceptionHandlingMiddleware>();
       ...       app.UseMvc();    }}

If you have multiple middleware components configured, it is advised to put the ExceptionHandlingMiddleware as the first one. By doing so, unhandled exceptions that might occur in other middleware components will also be logged by the ExceptionHandlingMiddleware component.

Application Insights#

To get the information logged in Azure Application Insights, configure logging like this when building the IWebHost in Startup.cs:

using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Serilog;using Serilog.Configuration;
public class Startup{    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)    {        Log.Logger = new LoggerConfiguration()            .WriteTo.AzureApplicationInsights("my-instrumentation-key")            .CreateLogger();    }}

Note, don't forget to add .UseSerilog in the Program.cs.

using Microsoft.AspNetCore.Hosting;using Serilog;
public class Program{    public static void Main(string[] args)    {        CreateWebHostBuilder(args).Build().Run();    }
    private static WebHostBuilder CreateWebHostBuilder(string[] args)    {        return WebHost.CreateDefaultBuilder(args)                      .UseSerilog()                      .UseStartup<Startup>();    }}

To have access to the .AzureApplicationInsights extension, make sure you've installed Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights.

โ† back