Take advantage of Serilog to implement structured logging in your ASP.Net Core applications Credit: Nishan Joomun Logging is an essential feature for detecting and investigating issues in our applications. Logging frameworks make it easy to log event data to pre-configured log targets. However, if your log file contains unstructured data, it becomes a nightmare to query the data. This is where structured logging comes into play. Structured logging makes it easy to query event data by ensuring that the data to be logged is written in a structured format. The format could be XML, JSON, or any other structured format that makes parsing the data easy. Structured logging also helps in processing the log files for log analytics. Serilog is a third-party, open-source library for structured logging. It allows developers to easily log structured event data to the console, to files, and to all kinds of storage systems. This article presents a discussion of how we can work with Serilog in ASP.NET Core. Create an ASP.NET Core project in Visual Studio In this section we will create an ASP.NET Core application and use it to learn how we can work with Serilog. Follow the steps outlined below to create a new ASP.NET Core project in Visual Studio 2017. Launch the Visual Studio 2017 IDE. Click File > New > Project. Select the “ASP.NET Core Web Application” project template. Specify the name and location for your project. Click OK. In the “New ASP.NET Core Web Application” dialog window, select .NET Core. Select ASP.NET Core 2.1 as the version and “Web API” as the project template. Check the “Enable Docker Support” checkbox as we will be deploying our application using Docker. Ensure that the “No Authentication” option is selected. We won’t be using authentication here. Click OK. This will create a new ASP.NET Core project in Visual Studio. Next we need to grab a few packages from NuGet. Select your project in the Solution Explorer window and right-click on “Manage NuGet Packages” to open the NuGet Package Manager window. Now install the following packages one by one. Serilog. This package provides support for working with fully structured events. AspNetCore. This package is used for providing Serilog support for ASP.NET Core applications. Settings.Configuration. This package provides support for Microsoft.Extensions.Configuration so that you can read configuration data from appsettings.json. Sinks.Console. This is a Serilog sink that sends Serilog events to the console. Sinks.RollingFile. This is a Serilog sink that provides support for storing log messages in a rolling file with fully structured events. Use a Serilog sink to direct log data to a log target Serilog takes advantage of sinks to send the logs to various logging targets such as a text file, a database, or even a log management solution. In other words, sinks are used to direct where the log messages should be sent. If the Serilog packages have been successfully installed in your system, the following code snippet can be used to send log data to the console. using (var logConfig = new LoggerConfiguration() .WriteTo.Console() .CreateLogger()) { logConfig.Information("This is a test data."); }; Note that Serilog lets you choose from a variety of logging levels including verbose, debug, information, warning, error, and fatal messages. Console logs are helpful for debugging purposes. When your application has been deployed in production, you might need to persist the logs to a file so that you can monitor the logs and perform log analysis. The Serilog.Sink.RollingFile package provides the support for working with rolling files. The following code snippet illustrates how you can configure a logger programmatically to log data to a file. var logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.RollingFile(@"d:log.txt", retainedFileCountLimit: 7) .CreateLogger(); logger.Information("Hello World"); Register and configure Serilog in ASP.NET Core To start leveraging Serilog in ASP.NET Core applications, you should register Serilog on the WebHostBuilder in the Program.cs file using the UseSerilog extension method as shown below. WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseSerilog() .Build(); Next, add the following line in the Configure method to enable the Serilog middleware. loggerFactory.AddSerilog(); Here’s how the Configure method in the Startup.cs file will look. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddSerilog(); app.UseMvc(); } Finally, you should specify the necessary configuration in the appsettings.json file. Then you can leverage dependency injection to inject the logger instance and work with Serilog in your controller methods in much the same way you use any other middleware. Because logging is an integral component of any application, the simplicity and flexibility of the logging framework is important. Serilog provides an easy-to-configure and easy-to-use logging component that can be used to log structured event data to various log targets using sinks. Related content news Wasmer WebAssembly platform now backs iOS Wasmer 5.0 release also features improved performance, a leaner codebase, and discontinued support for the Emscripten toolchain. By Paul Krill Oct 30, 2024 2 mins Mobile Development Web Development Software Development news analysis What Entrust certificate distrust means for developers Secure communications between web browsers and web servers depend on digital certificates backed by certificate authorities. What if the web browsers stop trusting your CA? By Travis Van Oct 30, 2024 9 mins Browser Security Web Development Application Security news Next.js 15 arrives with faster bundler High-performance Rust-based Turbopack bundler moves from beta to stable with the latest update of the React-based web framework. By Paul Krill Oct 24, 2024 2 mins JavaScript React Web Development feature WasmGC and the future of front-end Java development WebAssembly’s garbage collection extension makes it easier to run languages like Java on the front end. Could it be the start of a new era in web development? By Matthew Tyson Oct 16, 2024 10 mins Web Development Software Development Resources Videos