How to write logs to database using Serilog

9. May 2020

Questions searched on google

Serilog writing to Database

Creating Serilog Table from EF Core

XML Type EF Core

Data Annotation XML type

Adding Serilog in .NET Core 3


We will use the approach of Entity Framework Core Generated table for Serilog Logging in Database.

First create a Log Entity class in your Models folder with code below code


public class Log
        public int Id { get; set; }
        public string Message { get; set; }
        public string MessageTemplate { get; set; }
        public string Level { get; set; }
        public DateTime TimeStamp { get; set; }
        public string Exception { get; set; }
        [Column(TypeName ="Xml")]
        public string Properties { get; set; }
        public string LogEvent { get; set; }

Now goto your context class file and the following code

public virtual DbSet<Log> Logs { get; set; } 

and add the below line in OnModelCreating method


Now we have defined the details of table which we want entity framework to genereate in database. Open the powershell and run the migrations command as below

dotnet ef migrations add Log --context AppContext

Check the migrations file name <timestamp>_Log.cs with the required changes we need and then update the database

dotnet ef database update --context AppContext

Now check the SQL Server Object Explorer with the updated database . A table exists named Log

So we now have the required table for Serilog to begin logging . Now we will configure the serilog for this . Open nuget package manager console and add the below package in order to enable the Serilog sink for MSSqlServer

Add below package in order to activate the serilog configuration reader feature which will read how to connect to MSSqlServer

Install-Package Serilog.Sinks.MSSqlServer
Install-Package Serilog.Settings.Configuration

Now we have the basic packages installed , we will add the appsettings for the serilog to connect to the MSSqlServer
Add the below code to your appsettings.json

  "Serilog": {
    "Using": [ "Serilog.Sinks.MSSqlServer" ],
    "MinimumLevel": "Information",
    "WriteTo": [
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "Server=(localdb)\\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true", // connection String  
          "tableName": "Log" // table name  

We have kept the table name as "Log" same as we have defined in the AppContext class for entity framework core to create in database server.

Now add the following code in your Program.cs

public class Program
        public static void Main(string[] args)
            var configuration = new ConfigurationBuilder()
            Log.Logger = new LoggerConfiguration()

                Log.Information("Getting the Application Clanstech Application Running... ");

            catch(Exception ex)
                Log.Fatal(ex, "Host terminated unexpectedly");

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            .UseSerilog()//using Serilog.AspNetCore
            .ConfigureWebHostDefaults(webBuilder =>
            }).UseDefaultServiceProvider(options => options.ValidateScopes = false);

Before using .UseSerilog() method do remember to install the package

Install-Package Serilog.AspNetCore

Now run your application and you will see all the logs populated in your Log Table in database server .

References :


ASP.NET MVC Core, C#, Logging, MSSQL, Serilog , , , , ,

Adding logging to file in ASP.NET MVC Core using Serilog

24. April 2020

Open the Project.csproj file and add the following code

<PackageReference Include="Serilog.Extensions.Logging.File" Version="1.0.1"/>

Or you can open up the nuget Package Manager Console and write this command and press enter 

Install-Package Serilog.Extensions.Logging.File

 Or you can open the Powershell in goto the directory of your project and run this command 

dotnet add package Serilog.Extensions.Logging.File

This will automatically add the dependencies


Now open the Startup.cs file add the following code


And do remember to add the IloggerFactory loggerFactory parameter in Configure method parameters list . Line mentioning the file path is where the file will be created for logging.



Add the following code to your controller

public class HomeController : Controller
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
            _logger = logger;

        public IActionResult Index()

            _logger.LogInformation("Message displayed : " + $"HomePage visited at {DateTime.UtcNow.ToLongDateString()} , {DateTime.UtcNow.ToLongTimeString()}");
            return View();

Now you run the application and whenever you browse to the Index method of Home controller the log file will be appended .

Now check Logs Folder which contains the file with Date suffixed



ASP.NET MVC Core, Logging, Serilog , ,

Porting HTML5 Template to ASP.NET MVC Core View

20. April 2020

Whenever porting a HTML template to ASP.NET MVC Core view we have to keep in mind that the path for resources like image , css , scripts should always be coded with '/' before the folder name . For Example -

If you have a template named Clanstech with folder structure as  mentioned in below image.

With code in about.html will be like

<link rel="stylesheet" href="assets/css/aos.css">

In order to use the above css file in ASP.NET MVC Core project with the following structure

We will have to use the following code

<link rel="stylesheet" href="/assets/css/aos.css">

If we dint add '/' before assets folder then it will not load the css file if the user is on suppose /localhost:876/Home/About action/page/view.

To get more idea how file path works , below is the correct usage as shown on this link also


HTML File Paths

<img src="picture.jpg"> picture.jpg is located in the same folder as the current page
<img src="images/picture.jpg"> picture.jpg is located in the images folder in the current folder
<img src="/images/picture.jpg"> picture.jpg is located in the images folder at the root of the current web
<img src="../picture.jpg"> picture.jpg is located in the folder one level up from the current folder