So protokollieren Sie Daten in SQL Server in ASP.NET Core

Die Protokollierung ist eine wesentliche Funktion für jede Anwendung, da sie zum Erkennen, Untersuchen und Debuggen von Problemen erforderlich ist. Serilog ist eine Open-Source-Bibliothek eines Drittanbieters, mit der .NET-Entwickler strukturierte Daten in der Konsole, in Dateien und in verschiedenen anderen Arten von Datenspeichern protokollieren können. Sie können mehr über Serilog aus meinem früheren Beitrag hier erfahren. 

In diesem Artikel wird erläutert, wie Sie mit Serilog strukturierte Daten in einer SQL Server-Datenbank protokollieren können. Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen. 

Erstellen Sie ein ASP.NET Core 3.0-API-Projekt

Zunächst erstellen wir ein ASP.NET Core-Projekt in Visual Studio. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues ASP.NET Core-Projekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "ASP.Net Core-Webanwendung" aus.
  4. Weiter klicken.
  5. Geben Sie im nächsten Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Klicken Sie auf Erstellen.
  7. Wählen Sie im Fenster "Neue ASP.Net Core-Webanwendung erstellen" .NET Core als Laufzeit und ASP.NET Core 2.2 (oder höher) aus der Dropdown-Liste oben aus. Ich werde hier ASP.NET Core 3.0 verwenden.
  8. Wählen Sie "API" als Projektvorlage aus, um eine neue ASP.NET Core API-Anwendung zu erstellen. 
  9. Stellen Sie sicher, dass die Kontrollkästchen "Docker-Unterstützung aktivieren" und "Für HTTPS konfigurieren" deaktiviert sind, da diese Funktionen hier nicht verwendet werden.
  10. Stellen Sie sicher, dass die Authentifizierung auf "Keine Authentifizierung" eingestellt ist, da wir auch keine Authentifizierung verwenden.
  11. Klicken Sie auf Erstellen.

Dadurch wird ein neues ASP.NET Core API-Projekt in Visual Studio erstellt. Wählen Sie im Projektmappen-Explorer den Lösungsordner "Controller" aus und klicken Sie auf "Hinzufügen -> Controller ...", um einen neuen Controller mit dem Namen "DefaultController" zu erstellen. Wir werden dieses Projekt in den folgenden Abschnitten dieses Artikels verwenden.

Installieren Sie die NuGet-Pakete für Serilog

Um mit Serilog arbeiten zu können, sollten Sie die Serilog-Pakete von NuGet installieren. Sie können dies entweder über den NuGet-Paketmanager in der Visual Studio 2019-IDE oder durch Ausführen der folgenden Befehle in der NuGet-Paketmanagerkonsole tun:

Install-Package Serilog

Installationspaket Serilog.AspNetCore

Installationspaket Serilog.Sinks.MSSqlServer

Install-Package Serilog.Settings.Configuration

Initialisieren Sie Serilog in Program.cs in ASP.NET Core

Das folgende Codefragment zeigt, wie Sie Serilog in ASP.NET Core einbinden können. Beachten Sie, wie die Erweiterungsmethode UseSerilog () verwendet wurde, um Serilog als Protokollierungsanbieter festzulegen.

public static IWebHost BuildWebHost (string [] args) =>

            WebHost.CreateDefaultBuilder (args)

                   .UseStartup ()

                   .UseSerilog ()

                   .Bauen();

Erstellen Sie einen Beispiel-Webhost in ASP.NET Core

Natürlich benötigen wir eine Anwendung, um die Verwendung von Serilog zu veranschaulichen. Hier ist der vollständige Quellcode der Programmklasse für unsere Beispiel-App. Beachten Sie, wie wir den Webhost konfiguriert und erstellt haben.

    öffentliches Klassenprogramm

    {

        public static void Main (string [] args)

        {

            IConfigurationRoot configuration = neu

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

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

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

            (Konfiguration) .CreateLogger ();

            BuildWebHost (args) .Run ();

        }}

        public static IWebHost BuildWebHost (string [] args) =>

            WebHost.CreateDefaultBuilder (args)

                .UseStartup ()

                .UseSerilog ()

                .Bauen();

    }}

Denken Sie daran, den Serilog-Namespace wie unten gezeigt in Ihr Programm aufzunehmen:

mit Serilog;

Konfigurieren Sie die Datenbankverbindungseinstellungen in ASP.NET Core

Wenn Sie in Visual Studio ein neues ASP.NET Core-Projekt erstellen, wird standardmäßig die Datei appsettings.json erstellt. Hier können Sie die Datenbankverbindungszeichenfolge und andere Konfigurationsinformationen angeben. Öffnen Sie die Datei appsettings.json aus dem zuvor erstellten Projekt und geben Sie die folgenden Informationen ein:

{

  "Serilog": {

    "MinimumLevel": "Information",

    "WriteTo": [

      {

        "Name": "MSSqlServer",

        "Args": {

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

           Katalog = Forschung;    

     Benutzer-ID = joydip; Passwort = sa123 #; ",

          "tableName": "Log",

          "autoCreateSqlTable": true

        }}

      }}

    ]]

  }}

}}

Erstellen Sie eine Datenbanktabelle, um Daten in SQL Server zu protokollieren

Möglicherweise möchten Sie die Protokolltabelle auch selbst erstellen. Unten finden Sie das Skript, mit dem Sie eine Protokolltabelle in der SQL Server-Datenbank erstellen können.

TABELLE ERSTELLEN [Protokoll] (

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

   [Nachricht] nvarchar (max) NULL,

   [MessageTemplate] nvarchar (max) NULL,

   [Level] nvarchar (max) NULL,

   [TimeStamp] datetimeoffset (7) NICHT NULL,

   [Ausnahme] nvarchar (max) NULL,

   [Eigenschaften] nvarchar (max) NULL

   EINSCHRÄNKUNG [PK_Log]

     PRIMARY KEY CLUSTERED ([Id] ASC)

)

Wenn Sie die Anwendung ausführen, wird eine neue Tabelle mit dem Namen "Protokoll" erstellt und die ASP.NET Core-Startereignisse werden dort protokolliert. Abbildung 1 unten zeigt die Daten, die in der Protokolltabelle protokolliert wurden.

Protokollieren Sie Daten in Aktionsmethoden in ASP.NET Core

Sie können die Abhängigkeitsinjektion nutzen, um eine Logger-Instanz in Ihren Controller zu injizieren, wie im folgenden Codeausschnitt gezeigt:

öffentliche Klasse DefaultController: Controller

{

   privat schreibgeschützt ILogger _logger;

   public DefaultController (ILogger-Logger)

   {

      _logger = logger;

   }}

}}

Das folgende Codefragment zeigt, wie Sie Serilog in den Aktionsmethoden Ihres Controllers zum Protokollieren von Daten nutzen können.

öffentliche Klasse DefaultController: Controller

    {

        privat schreibgeschützt ILogger _logger;

        public DefaultController (ILogger-Logger)

        {

            _logger = logger;

        }}

        öffentlicher IActionResult Index ()

        {

            _logger.LogInformation ("Hallo Welt");

            return View ();

        }}

    }}

Obwohl Serilog unabhängig von .NET Core ist, lässt es sich problemlos in das ASP.NET Core-Ökosystem integrieren, sodass die strukturierte Protokollierung einfach und bequem ist. Serilog nutzt außerdem Dutzende von Senken, um die Protokolle an viele verschiedene Protokollierungsziele zu senden, von Textdateien über Datenbanken bis hin zu AWS-, Azure- und Google Cloud-Diensten. In diesem Beitrag habe ich gezeigt, wie wir mit der Microsoft SQL Server-Senke arbeiten können. Ich werde in einem zukünftigen Beitrag hier weitere erweiterte Funktionen von Serilog diskutieren.