Comment enregistrer des données sur SQL Server dans ASP.NET Core

La journalisation est une fonctionnalité essentielle pour toute application, car elle est nécessaire pour détecter, étudier et déboguer les problèmes. Serilog est une bibliothèque open source tierce qui permet aux développeurs .NET de consigner des données structurées dans la console, dans des fichiers et dans plusieurs autres types de magasins de données. Vous pouvez en savoir plus sur Serilog à partir de mon article précédent ici. 

Cet article explique comment utiliser Serilog pour enregistrer des données structurées dans une base de données SQL Server. Pour utiliser les exemples de code fournis dans cet article, vous devez disposer de Visual Studio 2019 installé sur votre système. Si vous n'en avez pas déjà une copie, vous pouvez télécharger Visual Studio 2019 ici. 

Créer un projet d'API ASP.NET Core 3.0

Tout d'abord, créons un projet ASP.NET Core dans Visual Studio. En supposant que Visual Studio 2019 est installé sur votre système, suivez les étapes décrites ci-dessous pour créer un nouveau projet ASP.NET Core dans Visual Studio.

  1. Lancez l'IDE de Visual Studio.
  2. Cliquez sur "Créer un nouveau projet".
  3. Dans la fenêtre «Créer un nouveau projet», sélectionnez «Application Web ASP.Net Core» dans la liste des modèles affichés.
  4. Cliquez sur Suivant.
  5. Dans la fenêtre «Configurer votre nouveau projet» ci-dessous, spécifiez le nom et l'emplacement du nouveau projet.
  6. Cliquez sur Créer.
  7. Dans la fenêtre «Créer une nouvelle application Web ASP.Net Core», sélectionnez .NET Core comme moteur d'exécution et ASP.NET Core 2.2 (ou version ultérieure) dans la liste déroulante en haut. J'utiliserai ASP.NET Core 3.0 ici.
  8. Sélectionnez «API» comme modèle de projet pour créer une nouvelle application API ASP.NET Core. 
  9. Assurez-vous que les cases à cocher «Activer le support Docker» et «Configurer pour HTTPS» ne sont pas cochées car nous n'utiliserons pas ces fonctionnalités ici.
  10. Assurez-vous que l'authentification est définie sur «Aucune authentification» car nous n'utiliserons pas non plus l'authentification.
  11. Cliquez sur Créer.

Cela créera un nouveau projet d'API ASP.NET Core dans Visual Studio. Sélectionnez le dossier de solution Contrôleurs dans la fenêtre Explorateur de solutions et cliquez sur «Ajouter -> Contrôleur…» pour créer un nouveau contrôleur nommé DefaultController. Nous utiliserons ce projet dans les sections suivantes de cet article.

Installer les packages NuGet pour Serilog

Pour travailler avec Serilog, vous devez installer les packages Serilog à partir de NuGet. Vous pouvez le faire via le gestionnaire de packages NuGet dans l'IDE de Visual Studio 2019 ou en exécutant les commandes suivantes sur la console du gestionnaire de packages NuGet:

Package d'installation Serilog

Package d'installation Serilog.AspNetCore

Package d'installation Serilog.Sinks.MSSqlServer

Installer-Package Serilog.Settings.Configuration

Initialiser Serilog dans Program.cs dans ASP.NET Core

L'extrait de code suivant illustre comment vous pouvez brancher Serilog dans ASP.NET Core. Notez comment la méthode d'extension UseSerilog () a été utilisée pour définir Serilog comme fournisseur de journalisation.

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

            WebHost.CreateDefaultBuilder (args)

                   .UseStartup ()

                   .UseSerilog ()

                   .Construire();

Créer un exemple d'hôte Web dans ASP.NET Core

Naturellement, nous aurons besoin d'une application pour illustrer l'utilisation de Serilog. Voici le code source complet de la classe Program pour notre exemple d'application. Notez comment nous avons configuré et construit l'hôte Web.

    Programme de classe publique

    {

        public static void Main (string [] args)

        {

            Configuration IConfigurationRoot = nouveau

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

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

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

            (configuration) .CreateLogger ();

            BuildWebHost (args) .Run ();

        }

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

            WebHost.CreateDefaultBuilder (args)

                .UseStartup ()

                .UseSerilog ()

                .Construire();

    }

N'oubliez pas d'inclure l'espace de noms Serilog dans votre programme comme indiqué ci-dessous:

en utilisant Serilog;

Configurer les paramètres de connexion à la base de données dans ASP.NET Core

Lorsque vous créez un nouveau projet ASP.NET Core dans Visual Studio, le fichier appsettings.json est créé par défaut. C'est ici que vous pouvez spécifier la chaîne de connexion à la base de données et d'autres informations de configuration. Ouvrez le fichier appsettings.json du projet que nous avons créé précédemment et entrez les informations suivantes:

{

  "Serilog": {

    "MinimumLevel": "Information",

    "Écrire à": [

      {

        "Nom": "MSSqlServer",

        "Args": {

          "connectionString": "Data Source = LAPTOP-ULJMOJQ5; Initial

           Catalogue = Recherche;    

     ID utilisateur = joydip; Mot de passe = sa123 #; ",

          "tableName": "Journal",

          "autoCreateSqlTable": true

        }

      }

    ]

  }

}

Créer une table de base de données pour consigner les données dans SQL Server

Vous pouvez également créer vous-même la table de journal. Vous trouverez ci-dessous le script que vous pouvez utiliser pour créer une table de journal dans la base de données SQL Server.

CREATE TABLE [Journal] (

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

   [Message] nvarchar (max) NULL,

   [MessageTemplate] nvarchar (max) NULL,

   [Niveau] nvarchar (max) NULL,

   [TimeStamp] datetimeoffset (7) NOT NULL,

   [Exception] nvarchar (max) NULL,

   [Propriétés] nvarchar (max) NULL

   CONTRAINTE [PK_Log]

     CLÉ PRIMAIRE CLUSTERED ([Id] ASC)

)

Lorsque vous exécutez l'application, une nouvelle table nommée Journal est créée et les événements de démarrage ASP.NET Core y sont enregistrés. La figure 1 ci-dessous montre les données qui ont été enregistrées dans la table Log.

Journaliser les données dans les méthodes d'action dans ASP.NET Core

Vous pouvez tirer parti de l'injection de dépendances pour injecter une instance de journalisation dans votre contrôleur, comme indiqué dans l'extrait de code ci-dessous:

public class DefaultController: Controller

{

   privé en lecture seule ILogger _logger;

   public DefaultController (enregistreur ILogger)

   {

      _logger = enregistreur;

   }

}

L'extrait de code suivant illustre comment vous pouvez tirer parti de Serilog dans les méthodes d'action de votre contrôleur pour consigner les données.

public class DefaultController: Controller

    {

        privé en lecture seule ILogger _logger;

        public DefaultController (enregistreur ILogger)

        {

            _logger = enregistreur;

        }

        Index IActionResult public ()

        {

            _logger.LogInformation ("Hello World");

            retour Vue ();

        }

    }

Bien qu'indépendant de .NET Core, Serilog se connecte parfaitement à l'écosystème ASP.NET Core, ce qui rend la journalisation structurée facile et pratique. Serilog tire également parti de dizaines de récepteurs pour envoyer les journaux à de nombreuses cibles de journalisation différentes, allant des fichiers texte aux bases de données en passant par les services AWS, Azure et Google Cloud. Dans cet article, j'ai montré comment nous pouvons travailler avec le récepteur Microsoft SQL Server. Je discuterai d'autres fonctionnalités avancées de Serilog dans un prochain article ici.