Hur man loggar data till SQL Server i ASP.NET Core

Loggning är en viktig funktion för alla applikationer, eftersom det är nödvändigt för att upptäcka, undersöka och felsöka problem. Serilog är ett open source-bibliotek från tredje part som gör det möjligt för .NET-utvecklare att logga strukturerad data till konsolen, till filer och till flera andra typer av datalagrar. Du kan lära dig mer om Serilog från mitt tidigare inlägg här. 

Den här artikeln diskuterar hur vi kan använda Serilog för att logga strukturerad data till en SQL Server-databas. För att arbeta med kodexemplen i den här artikeln bör du ha Visual Studio 2019 installerat i ditt system. Om du inte redan har en kopia kan du ladda ner Visual Studio 2019 här. 

Skapa ett ASP.NET Core 3.0 API-projekt

Låt oss först skapa ett ASP.NET-kärnprojekt i Visual Studio. Förutsatt att Visual Studio 2019 är installerat i ditt system, följ stegen nedan för att skapa ett nytt ASP.NET-kärnprojekt i Visual Studio.

  1. Starta Visual Studio IDE.
  2. Klicka på "Skapa nytt projekt."
  3. I fönstret "Skapa nytt projekt" väljer du "ASP.Net Core Web Application" från listan över mallar som visas.
  4. Klicka på Nästa.
  5. I fönstret "Konfigurera ditt nya projekt" som visas nedan anger du namn och plats för det nya projektet.
  6. Klicka på Skapa.
  7. I fönstret ”Skapa ny ASP.Net Core-webbapplikation” väljer du .NET Core som körtid och ASP.NET Core 2.2 (eller senare) från rullgardinsmenyn högst upp. Jag använder ASP.NET Core 3.0 här.
  8. Välj “API” som projektmall för att skapa en ny ASP.NET Core API-applikation. 
  9. Se till att kryssrutorna "Aktivera Docker-support" och "Konfigurera för HTTPS" är avmarkerade eftersom vi inte använder dessa funktioner här.
  10. Se till att autentisering är inställd som "Ingen autentisering" eftersom vi inte heller använder autentisering.
  11. Klicka på Skapa.

Detta skapar ett nytt ASP.NET Core API-projekt i Visual Studio. Välj Controllers-lösningsmappen i Solution Explorer-fönstret och klicka på "Lägg till -> Controller ..." för att skapa en ny controller med namnet DefaultController. Vi använder detta projekt i de efterföljande avsnitten i den här artikeln.

Installera NuGet-paketen för Serilog

För att arbeta med Serilog bör du installera Serilog-paketen från NuGet. Du kan göra detta antingen via NuGet-pakethanteraren i Visual Studio 2019 IDE eller genom att utföra följande kommandon på NuGet-pakethanterarkonsolen:

Installera-paketet Serilog

Installera-paket Serilog.AspNetCore

Installera-paketet Serilog.Sinks.MSSqlServer

Installera-paketet Serilog.Settings.Configuration

Initiera Serilog i Program.cs i ASP.NET Core

Följande kodavsnitt illustrerar hur du kan ansluta Serilog till ASP.NET Core. Observera hur Extensionsmetoden UseSerilog () har använts för att ställa in Serilog som loggningsleverantör.

offentlig statisk IWebHost BuildWebHost (sträng [] args) =>

            WebHost.CreateDefaultBuilder (args)

                   .UseStartup ()

                   .UseSerilog ()

                   .Bygga();

Bygg ett exempel på webbhotell i ASP.NET Core

Naturligtvis behöver vi en applikation för att illustrera användningen av Serilog. Här är den fullständiga källkoden för programklassen för vår exempelapp. Observera hur vi har konfigurerat och byggt webbhotellen.

    offentligt klassprogram

    {

        public static void Main (string [] args)

        {

            IConfigurationRootkonfiguration = ny

            ConfigurationBuilder (). AddJsonFile ("appsettings.json",

            valfritt: false, reloadOnChange: true) .Build ();

            Log.Logger = ny LoggerConfiguration (). ReadFrom.Configuration

            (konfiguration) .CreateLogger ();

            BuildWebHost (args) .Run ();

        }

        offentlig statisk IWebHost BuildWebHost (sträng [] args) =>

            WebHost.CreateDefaultBuilder (args)

                .UseStartup ()

                .UseSerilog ()

                .Bygga();

    }

Kom ihåg att inkludera Serilog-namnområdet i ditt program enligt nedan:

med användning av Serilog;

Konfigurera inställningar för databasanslutning i ASP.NET Core

När du skapar ett nytt ASP.NET Core-projekt i Visual Studio skapas appsettings.json-filen som standard. Här kan du ange databasanslutningssträngen och annan konfigurationsinformation. Öppna filen appsettings.json från projektet vi skapade tidigare och ange följande information:

{

  "Serilog": {

    "MinimumLevel": "Information",

    "Skriva till": [

      {

        "Namn": "MSSqlServer",

        "Args": {

          "connectionString": "Datakälla = LAPTOP-ULJMOJQ5; Initial

           Katalog = forskning;    

     Användar-id = joydip; Lösenord = sa123 #; ",

          "tableName": "Logg",

          "autoCreateSqlTable": sant

        }

      }

    ]

  }

}

Skapa en databastabell för att logga data i SQL Server

Du kanske också vill skapa loggtabellen. Nedan visas skriptet som du kan använda för att skapa en loggtabell i SQL Server-databasen.

SKAPA TABELL [Logg] (

   [Id] int IDENTITY (1,1) NOT NULL,

   [Meddelande] nvarchar (max) NULL,

   [MessageTemplate] nvarchar (max) NULL,

   [Nivå] nvarchar (max) NULL,

   [TimeStamp] datetimeoffset (7) INTE NULL,

   [Undantag] nvarchar (max) NULL,

   [Egenskaper] nvarchar (max) NULL

   KONSTRAINT [PK_Log]

     PRIMÄR NYCKELN KLUSTERAD ([Id] ASC)

)

När du kör applikationen skapas en ny tabell med namnet Log och ASP.NET Core starthändelser loggas där. Figur 1 nedan visar de data som har loggats inuti loggtabellen.

Logga data i åtgärdsmetoder i ASP.NET Core

Du kan utnyttja beroendeinsprutning för att injicera en loggerinstans i din kontroller som visas i kodavsnittet nedan:

offentlig klass DefaultController: Controller

{

   privat readonly ILogger _logger;

   offentlig DefaultController (ILogger logger)

   {

      _logger = logger;

   }

}

Följande kodavsnitt illustrerar hur du kan dra nytta av Serilog i din handlings handlingsmetoder för att logga data.

offentlig klass DefaultController: Controller

    {

        privat readonly ILogger _logger;

        offentlig DefaultController (ILogger logger)

        {

            _logger = logger;

        }

        offentligt IActionResult-index ()

        {

            _logger.LogInformation ("Hello World");

            returnera Visa ();

        }

    }

Även om det är oberoende av .NET Core kopplas Serilog in i ASP.NET Core-ekosystemet, vilket gör strukturerad loggning enkel och bekväm. Serilog utnyttjar också dussintals sänkor för att skicka loggarna till många olika loggningsmål, allt från textfiler till databaser till AWS, Azure och Google Cloud-tjänster. I det här inlägget har jag visat hur vi kan arbeta med Microsoft SQL Server-sink. Jag kommer att diskutera andra avancerade funktioner i Serilog i ett framtida inlägg här.