Cara log data ke SQL Server di ASP.NET Core

Pembalakan adalah ciri penting untuk aplikasi apa pun, kerana perlu untuk mengesan, menyiasat, dan menyelesaikan masalah. Serilog adalah perpustakaan sumber terbuka pihak ketiga yang membolehkan pemaju .NET log data berstruktur ke konsol, fail, dan ke beberapa jenis penyimpanan data lain. Anda boleh mengetahui lebih lanjut mengenai Serilog dari catatan saya yang terdahulu di sini. 

Artikel ini membincangkan bagaimana kita dapat menggunakan Serilog untuk mencatat data berstruktur ke pangkalan data SQL Server. Untuk bekerja dengan contoh kod yang disediakan dalam artikel ini, anda harus memasang Visual Studio 2019 di sistem anda. Sekiranya anda belum mempunyai salinannya, anda boleh memuat turun Visual Studio 2019 di sini. 

Buat projek ASP.NET Core 3.0 API

Pertama, mari buat projek Teras ASP.NET di Visual Studio. Dengan mengandaikan Visual Studio 2019 dipasang di sistem anda, ikuti langkah-langkah yang digariskan di bawah untuk membuat projek Teras ASP.NET baru di Visual Studio.

  1. Lancarkan ID Studio Visual.
  2. Klik pada "Buat projek baru."
  3. Di tetingkap "Buat projek baru", pilih "Aplikasi Web Teras ASP.Net" dari senarai templat yang dipaparkan.
  4. Klik Seterusnya.
  5. Di tetingkap "Konfigurasikan projek baru anda" yang ditunjukkan di sebelah, tentukan nama dan lokasi untuk projek baru.
  6. Klik Buat.
  7. Di tetingkap "Buat Aplikasi Web ASP.Net Core Baru", pilih .NET Core sebagai runtime dan ASP.NET Core 2.2 (atau lebih baru) dari senarai drop-down di bahagian atas. Saya akan menggunakan ASP.NET Core 3.0 di sini.
  8. Pilih "API" sebagai templat projek untuk membuat aplikasi ASP.NET Core API baru. 
  9. Pastikan bahawa kotak centang "Aktifkan Docker Support" dan "Configure for HTTPS" tidak dicentang kerana kami tidak akan menggunakan fitur tersebut di sini.
  10. Pastikan bahawa Pengesahan ditetapkan sebagai "Tanpa Pengesahan" kerana kami juga tidak akan menggunakan pengesahan.
  11. Klik Buat.

Ini akan membuat projek ASP.NET Core API baru di Visual Studio. Pilih folder penyelesaian Pengawal di tetingkap Penyelesaian Penyelesaian dan klik "Tambah -> Pengawal ..." untuk membuat pengawal baru bernama DefaultController. Kami akan menggunakan projek ini di bahagian seterusnya artikel ini.

Pasang pakej NuGet untuk Serilog

Untuk bekerja dengan Serilog, anda harus memasang pakej Serilog dari NuGet. Anda boleh melakukannya sama ada melalui pengurus pakej NuGet di dalam Visual Studio 2019 IDE, atau dengan melaksanakan perintah berikut di konsol pengurus pakej NuGet:

Pasang Pakej Serilog

Pasang-Pakej Serilog.AspNetCore

Pasang-Pakej Serilog.Sinks.MSSqlServer

Pasang-Pakej Serilog.Settings.Configuration

Memulakan Serilog dalam Program.cs di ASP.NET Core

Coretan kod berikut menggambarkan bagaimana anda boleh memasukkan Serilog ke ASP.NET Core. Perhatikan bagaimana kaedah peluasan UseSerilog () telah digunakan untuk menetapkan Serilog sebagai penyedia pembalakan.

IWebHost BuildWebHost statik awam (string [] args) =>

            WebHost.CreateDefaultBuilder (args)

                   .GunakanMulakan ()

                   .GunakanSerilog ()

                   .Bangun ();

Bina hos web contoh dalam ASP.NET Core

Secara semula jadi, kita memerlukan aplikasi untuk menggambarkan penggunaan Serilog. Inilah kod sumber lengkap kelas Program untuk aplikasi contoh kami. Perhatikan bagaimana kami telah mengkonfigurasi dan membina hos web.

    Program kelas awam

    {

        kekosongan statik awam Utama (string [] args)

        {

            IConfigurationRoot konfigurasi = baru

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

            pilihan: false, reloadOnChange: true) .Bangun ();

            Log.Logger = Konfigurasi Logger baru (). ReadFrom.Configuration

            (konfigurasi) .CreateLogger ();

            BuildWebHost (args). Jalankan ();

        }

        IWebHost BuildWebHost statik awam (string [] args) =>

            WebHost.CreateDefaultBuilder (args)

                .GunakanMulakan ()

                .GunakanSerilog ()

                .Bangun ();

    }

Ingatlah untuk memasukkan ruang nama Serilog dalam program anda seperti yang ditunjukkan di bawah:

menggunakan Serilog;

Konfigurasikan tetapan sambungan pangkalan data dalam ASP.NET Core

Apabila anda membuat projek ASP.NET Core baru di Visual Studio, fail appsettings.json dibuat secara lalai. Di sinilah anda dapat menentukan rentetan sambungan pangkalan data dan maklumat konfigurasi lain. Buka fail appsettings.json dari projek yang kami buat sebelumnya dan masukkan maklumat berikut:

{

  "Serilog": {

    "MinimumLevel": "Maklumat",

    "Tulis kepada": [

      {

        "Nama": "MSSqlServer",

        "Hujah": {

          "connectionString": "Sumber Data = LAPTOP-ULJMOJQ5; Permulaan

           Katalog = Penyelidikan;    

     Id Pengguna = joydip; Kata Laluan = sa123 #; ",

          "tableName": "Log",

          "autoCreateSqlTable": benar

        }

      }

    ]

  }

}

Buat jadual pangkalan data untuk log data di SQL Server

Anda juga mungkin mahu membuat jadual log sendiri. Berikut adalah skrip yang boleh anda gunakan untuk membuat jadual log dalam pangkalan data SQL Server.

BUAT JADUAL [Log] (

   [Id] int IDENTITY (1,1) TIDAK BENAR,

   [Mesej] nvarchar (maksimum) NULL,

   [MessageTemplate] nvarchar (maksimum) NULL,

   [Level] nvarchar (maks) NULL,

   [TimeStamp] datetimeoffset (7) TIDAK NULL,

   [Pengecualian] nvarchar (maksimum) NULL,

   [Properties] nvarchar (maksimum) NULL

   CONSTRAINT [PK_Log]

     KUNCI UTAMA DITUTUP ([Id] ASC)

)

Semasa anda menjalankan aplikasi, jadual baru bernama Log akan dibuat dan acara permulaan ASP.NET Core akan dicatat di sana. Gambar 1 di bawah menunjukkan data yang telah dimasukkan ke dalam jadual Log.

Log data dalam kaedah tindakan dalam ASP.NET Core

Anda boleh memanfaatkan suntikan kebergantungan untuk memasukkan contoh logger di pengawal anda seperti yang ditunjukkan dalam coretan kod di bawah:

kelas awam DefaultController: Controller

{

   ILogger _logger peribadi baca;

   awam DefaultController (ILogger logger)

   {

      _logger = pembalak;

   }

}

Coretan kod berikut menggambarkan bagaimana anda dapat memanfaatkan Serilog dalam kaedah tindakan pengawal anda untuk log data.

kelas awam DefaultController: Controller

    {

        ILogger _logger peribadi baca;

        awam DefaultController (ILogger logger)

        {

            _logger = pembalak;

        }

        Indeks IActionResult awam ()

        {

            _logger.LogInformation ("Hello World");

            kembali Paparan ();

        }

    }

Walaupun tidak bergantung kepada .NET Core, Serilog memasukkan ke dalam ekosistem ASP.NET Core dengan baik, menjadikan pembalakan berstruktur mudah dan senang. Serilog juga memanfaatkan puluhan sink untuk menghantar log ke banyak sasaran pembalakan yang berbeza, mulai dari fail teks hingga pangkalan data hingga AWS, Azure, dan perkhidmatan Google Cloud. Dalam catatan ini, saya telah menunjukkan bagaimana kita dapat bekerja dengan sinki Microsoft SQL Server. Saya akan membincangkan ciri-ciri canggih Serilog lain dalam siaran masa depan di sini.