Programmering

Sådan logges data til SQL Server i ASP.NET Core

Logføring er en væsentlig funktion til enhver applikation, da det er nødvendigt for at opdage, undersøge og debugge problemer. Serilog er et open source-bibliotek fra tredjepart, der giver .NET-udviklere mulighed for at logge strukturerede data til konsollen, til filer og til flere andre slags datalagre. Du kan lære mere om Serilog fra mit tidligere indlæg her.

Denne artikel diskuterer, hvordan vi kan bruge Serilog til at logge strukturerede data til en SQL Server-database. For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et ASP.NET Core 3.0 API-projekt

Lad os først starte med at oprette et ASP.NET Core-projekt i Visual Studio. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge trinene beskrevet nedenfor for at oprette et nyt ASP.NET Core-projekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "ASP.Net Core Web Application" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt", der vises nedenfor, skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.
  7. I vinduet "Opret ny ASP.Net Core-webapplikation" skal du vælge .NET Core som runtime og ASP.NET Core 2.2 (eller nyere) fra rullelisten øverst. Jeg bruger ASP.NET Core 3.0 her.
  8. Vælg “API” som projektskabelon for at oprette en ny ASP.NET Core API-applikation.
  9. Sørg for, at afkrydsningsfelterne "Aktivér Docker-support" og "Konfigurer til HTTPS" ikke er markeret, da vi ikke bruger disse funktioner her.
  10. Sørg for, at godkendelse er indstillet som "Ingen godkendelse", da vi heller ikke bruger godkendelse.
  11. Klik på Opret.

Dette opretter et nyt ASP.NET Core API-projekt i Visual Studio. Vælg Controllers-løsningsmappen i vinduet Solution Explorer, og klik på "Tilføj -> Controller ..." for at oprette en ny controller med navnet DefaultController. Vi bruger dette projekt i de efterfølgende afsnit i denne artikel.

Installer NuGet-pakkerne til Serilog

For at arbejde med Serilog skal du installere Serilog-pakkerne fra NuGet. Du kan gøre dette enten via NuGet-pakkehåndteringen i Visual Studio 2019 IDE eller ved at udføre følgende kommandoer på NuGet-pakkehåndteringskonsollen:

Installér-pakke Serilog

Installér-pakke Serilog.AspNetCore

Installationspakke Serilog.Sinks.MSSqlServer

Installationspakke Serilog.Settings.Configuration

Initialiser Serilog i Program.cs i ASP.NET Core

Følgende kodestykke illustrerer, hvordan du kan tilslutte Serilog til ASP.NET Core. Bemærk, hvordan UseSerilog () - udvidelsesmetoden er blevet brugt til at indstille Serilog som loggeudbyder.

offentlig statisk IWebHost BuildWebHost (streng [] args) =>

WebHost.CreateDefaultBuilder (args)

.UseStartup ()

.UseSerilog ()

.Byg ();

Byg et eksempel på webhost i ASP.NET Core

Naturligvis har vi brug for en applikation til at illustrere brugen af ​​Serilog. Her er den komplette kildekode for programklassen til vores eksempelapp. Bemærk, hvordan vi har konfigureret og bygget webhost.

   offentligt klasseprogram

    {

offentlig statisk tomrum Main (streng [] args)

        {

IConfigurationRoot-konfiguration = ny

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

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

Log.Logger = ny LoggerConfiguration (). LæsFrom.Configuration

(konfiguration) .CreateLogger ();

BuildWebHost (args) .Run ();

        }

offentlig statisk IWebHost BuildWebHost (streng [] args) =>

WebHost.CreateDefaultBuilder (args)

.UseStartup ()

.UseSerilog ()

.Byg ();

    }

Husk at inkludere Serilog-navneområdet i dit program som vist nedenfor:

ved hjælp af Serilog;

Konfigurer indstillinger for databaseforbindelse i ASP.NET Core

Når du opretter et nyt ASP.NET Core-projekt i Visual Studio, oprettes appsettings.json-filen som standard. Her kan du specificere databaseforbindelsesstrengen og andre konfigurationsoplysninger. Åbn filen appsettings.json fra det projekt, vi oprettede tidligere, og indtast følgende oplysninger:

{

"Serilog": {

"MinimumLevel": "Information",

"Skrive til": [

      {

"Navn": "MSSqlServer",

"Args": {

"connectionString": "Datakilde = LAPTOP-ULJMOJQ5; Initial

Katalog = Forskning;

Bruger-id = joydip; Adgangskode = sa123 #; ",

"tableName": "Log",

"autoCreateSqlTable": sandt

        }

      }

    ]

  }

}

Opret en databasetabel for at logge data i SQL Server

Det kan også være en god idé at oprette logtabellen selv. Nedenfor er det script, du kan bruge til at oprette en logtabel i SQL Server-databasen.

Opret TABEL [Log] (

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

[Besked] nvarchar (max) NULL,

[MessageTemplate] nvarchar (max) NULL,

[Niveau] nvarchar (maks.) NULL,

[TimeStamp] datetimeoffset (7) IKKE NULL,

[Undtagelse] nvarchar (max) NULL,

[Egenskaber] nvarchar (max) NULL

KONTRAINT [PK_Log]

PRIMÆR NØGLE KLUSTERET ([Id] ASC)

)

Når du kører applikationen, oprettes en ny tabel med navnet Log, og ASP.NET Core-opstartshændelserne logges der. Figur 1 nedenfor viser de data, der er logget inde i logtabellen.

Log data i handlingsmetoder i ASP.NET Core

Du kan udnytte afhængighedsindsprøjtning til at indsprøjte en loggerforekomst i din controller som vist i kodestykket nedenfor:

offentlig klasse DefaultController: Controller

{

privat readonly ILogger _logger;

offentlig DefaultController (ILogger logger)

   {

_logger = logger;

   }

}

Følgende kodestykke illustrerer, hvordan du kan udnytte Serilog i din controllerens handlingsmetoder til at logge data.

offentlig klasse DefaultController: Controller

    {

privat readonly ILogger _logger;

offentlig DefaultController (ILogger logger)

        {

_logger = logger;

        }

offentligt IActionResult-indeks ()

        {

_logger.LogInformation ("Hello World");

returner Visning ();

        }

    }

Selvom Serilog er uafhængig af .NET Core, tilsluttes det pænt til ASP.NET Core-økosystemet, hvilket gør struktureret logning let og praktisk. Serilog drager også fordel af snesevis af dræn til at sende logfilerne til mange forskellige logningsmål, der spænder fra tekstfiler til databaser til AWS, Azure og Google Cloud-tjenester. I dette indlæg har jeg demonstreret, hvordan vi kan arbejde med Microsoft SQL Server-vasken. Jeg vil diskutere andre avancerede funktioner i Serilog i et fremtidigt indlæg her.