Programmering

Hvordan logge data til SQL Server i ASP.NET Core

Logging er en viktig funksjon for ethvert program, da det er nødvendig for å oppdage, undersøke og feilsøke problemer. Serilog er et tredjeparts open source-bibliotek som lar .NET-utviklere logge strukturerte data til konsollen, til filer og til flere andre typer datalagre. Du kan lære mer om Serilog fra mitt tidligere innlegg her.

Denne artikkelen diskuterer hvordan vi kan bruke Serilog til å logge strukturerte data til en SQL Server-database. For å jobbe med kodeeksemplene som er gitt i denne artikkelen, bør du ha Visual Studio 2019 installert på systemet ditt. Hvis du ikke allerede har en kopi, kan du laste ned Visual Studio 2019 her.

Opprett et ASP.NET Core 3.0 API-prosjekt

Først og fremst, la oss lage et ASP.NET Core-prosjekt i Visual Studio. Forutsatt at Visual Studio 2019 er installert i systemet ditt, følger du trinnene som er beskrevet nedenfor for å opprette et nytt ASP.NET Core-prosjekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klikk på "Opprett nytt prosjekt."
  3. I vinduet "Opprett nytt prosjekt" velger du "ASP.Net Core Web Application" fra listen over maler som vises.
  4. Klikk på Neste.
  5. I vinduet “Konfigurer ditt nye prosjekt” som vises, angir du navnet og stedet for det nye prosjektet.
  6. Klikk på Opprett.
  7. I vinduet "Create New ASP.Net Core Web Application" velger du .NET Core som kjøretid og ASP.NET Core 2.2 (eller nyere) fra rullegardinlisten øverst. Jeg bruker ASP.NET Core 3.0 her.
  8. Velg “API” som prosjektmal for å opprette et nytt ASP.NET Core API-program.
  9. Forsikre deg om at avmerkingsboksene "Aktiver Docker-støtte" og "Konfigurer for HTTPS" ikke er merket av da vi ikke bruker disse funksjonene her.
  10. Forsikre deg om at autentisering er angitt som “ingen godkjenning”, da vi heller ikke bruker autentisering.
  11. Klikk på Opprett.

Dette vil opprette et nytt ASP.NET Core API-prosjekt i Visual Studio. Velg Controllers-løsningsmappen i Solution Explorer-vinduet, og klikk "Legg til -> Controller ..." for å opprette en ny kontroller som heter DefaultController. Vi bruker dette prosjektet i de påfølgende delene av denne artikkelen.

Installer NuGet-pakkene for Serilog

For å jobbe med Serilog, bør du installere Serilog-pakkene fra NuGet. Du kan gjøre dette enten via NuGet pakkebehandling i Visual Studio 2019 IDE, eller ved å utføre følgende kommandoer på NuGet pakkebehandler-konsoll:

Installasjonspakke Serilog

Installasjonspakke Serilog.AspNetCore

Installasjonspakke Serilog.Sinks.MSSqlServer

Installasjonspakke Serilog.Settings.Configuration

Initialiser Serilog i Program.cs i ASP.NET Core

Følgende kodebit illustrerer hvordan du kan koble Serilog til ASP.NET Core. Legg merke til hvordan UseSerilog () - utvidelsesmetoden har blitt brukt til å angi Serilog som loggleverandør.

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

WebHost.CreateDefaultBuilder (args)

.UseStartup ()

.BrukSerilog ()

.Bygge();

Bygg et eksempel på webverten i ASP.NET Core

Naturligvis trenger vi en applikasjon for å illustrere bruken av Serilog. Her er den fullstendige kildekoden til programklassen for eksempelappen vår. Legg merke til hvordan vi har konfigurert og bygget webverten.

   offentlig klasse Program

    {

public static void Main (streng [] args)

        {

IConfigurationRoot konfigurasjon = ny

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

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

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

(konfigurasjon) .CreateLogger ();

BuildWebHost (args) .Run ();

        }

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

WebHost.CreateDefaultBuilder (args)

.UseStartup ()

.BrukSerilog ()

.Bygge();

    }

Husk å ta med Serilog-navneområdet i programmet ditt som vist nedenfor:

bruker Serilog;

Konfigurer innstillinger for databasetilkobling i ASP.NET Core

Når du oppretter et nytt ASP.NET Core-prosjekt i Visual Studio, opprettes filen appsettings.json som standard. Her kan du spesifisere databaseforbindelsesstrengen og annen konfigurasjonsinformasjon. Åpne filen appsettings.json fra prosjektet vi opprettet tidligere, og skriv inn følgende informasjon:

{

"Serilog": {

"MinimumLevel": "Informasjon",

"Skrive til": [

      {

"Navn": "MSSqlServer",

"Args": {

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

Katalog = Forskning;

Bruker-ID = joydip; Passord = sa123 #; ",

"tableName": "Logg",

"autoCreateSqlTable": sant

        }

      }

    ]

  }

}

Opprett en databasetabell for å logge data i SQL Server

Det kan også være lurt å lage loggbordet også. Nedenfor er skriptet du kan bruke til å lage en loggtabell i SQL Server-databasen.

OPPRETT TABELL [Logg] (

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

[Melding] nvarchar (maks) NULL,

[MessageTemplate] nvarchar (max) NULL,

[Nivå] nvarchar (maks) NULL,

[TimeStamp] datetimeoffset (7) IKKE NULL,

[Unntak] nvarchar (maks) NULL,

[Egenskaper] nvarchar (maks) NULL

KONTRAINT [PK_Log]

HOVEDNØKKEL KLASSERT ([Id] ASC)

)

Når du kjører applikasjonen, opprettes en ny tabell som heter Logg, og ASP.NET Core-oppstartshendelsene logges der. Figur 1 nedenfor viser dataene som er logget inne i Logg-tabellen.

Logg data i handlingsmetoder i ASP.NET Core

Du kan utnytte avhengighetsinjeksjon for å injisere en loggerforekomst i kontrolleren din, som vist i kodebiten nedenfor:

offentlig klasse DefaultController: Controller

{

privat readonly ILogger _logger;

offentlig DefaultController (ILogger logger)

   {

_logger = logger;

   }

}

Følgende kodebit illustrerer hvordan du kan dra nytte av Serilog i kontrollerens handlingsmetoder for å logge data.

offentlig klasse DefaultController: Controller

    {

privat readonly ILogger _logger;

offentlig DefaultController (ILogger logger)

        {

_logger = logger;

        }

offentlig IActionResult-indeks ()

        {

_logger.LogInformation ("Hello World");

return Vis ();

        }

    }

Selv om det er uavhengig av .NET Core, kobles Serilog pent til ASP.NET Core-økosystemet, noe som gjør strukturert logging enkel og praktisk. Serilog benytter seg også av dusinvis av vasker for å sende loggene til mange forskjellige loggmål, alt fra tekstfiler til databaser til AWS, Azure og Google Cloud-tjenester. I dette innlegget har jeg demonstrert hvordan vi kan jobbe med Microsoft SQL Server-vasken. Jeg vil diskutere andre avanserte funksjoner i Serilog i et fremtidig innlegg her.