วิธีบันทึกข้อมูลไปยัง SQL Server ใน ASP.NET Core

การบันทึกเป็นคุณสมบัติที่จำเป็นสำหรับแอปพลิเคชันใด ๆ เนื่องจากจำเป็นสำหรับการตรวจจับตรวจสอบและแก้ไขปัญหา Serilog เป็นไลบรารีโอเพ่นซอร์สของบุคคลที่สามที่อนุญาตให้นักพัฒนา. NET บันทึกข้อมูลที่มีโครงสร้างไปยังคอนโซลไฟล์และที่เก็บข้อมูลประเภทอื่น ๆ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Serilog ได้จากโพสต์ก่อนหน้าของฉันที่นี่ 

บทความนี้กล่าวถึงวิธีที่เราสามารถใช้ Serilog เพื่อบันทึกข้อมูลที่มีโครงสร้างไปยังฐานข้อมูล SQL Server ในการทำงานกับตัวอย่างโค้ดที่ให้ไว้ในบทความนี้คุณควรติดตั้ง Visual Studio 2019 ในระบบของคุณ หากคุณยังไม่มีสำเนาคุณสามารถดาวน์โหลด Visual Studio 2019 ได้ที่นี่ 

สร้างโครงการ ASP.NET Core 3.0 API

ก่อนอื่นมาสร้างโครงการ ASP.NET Core ใน Visual Studio สมมติว่ามีการติดตั้ง Visual Studio 2019 ในระบบของคุณให้ทำตามขั้นตอนที่ระบุด้านล่างเพื่อสร้างโครงการ ASP.NET Core ใหม่ใน Visual Studio

  1. เปิด Visual Studio IDE
  2. คลิกที่ "สร้างโครงการใหม่"
  3. ในหน้าต่าง "สร้างโครงการใหม่" เลือก "ASP.Net Core Web Application" จากรายการเทมเพลตที่แสดง
  4. คลิกถัดไป
  5. ในหน้าต่าง "กำหนดค่าโครงการใหม่ของคุณ" ที่แสดงถัดไประบุชื่อและที่ตั้งสำหรับโครงการใหม่
  6. คลิกสร้าง
  7. ในหน้าต่าง“ Create New ASP.Net Core Web Application” ให้เลือก. NET Core เป็นรันไทม์และ ASP.NET Core 2.2 (หรือใหม่กว่า) จากรายการดรอปดาวน์ที่ด้านบน ฉันจะใช้ ASP.NET Core 3.0 ที่นี่
  8. เลือก“ API” เป็นเทมเพลตโครงการเพื่อสร้างแอปพลิเคชัน ASP.NET Core API ใหม่ 
  9. ตรวจสอบให้แน่ใจว่าไม่มีการเลือกช่องทำเครื่องหมาย "เปิดใช้งานการสนับสนุน Docker" และ "กำหนดค่าสำหรับ HTTPS" เนื่องจากเราจะไม่ใช้คุณลักษณะเหล่านั้นที่นี่
  10. ตรวจสอบให้แน่ใจว่าการรับรองความถูกต้องถูกตั้งค่าเป็น“ ไม่มีการพิสูจน์ตัวตน” เนื่องจากเราจะไม่ใช้การพิสูจน์ตัวตน
  11. คลิกสร้าง

สิ่งนี้จะสร้างโครงการ ASP.NET Core API ใหม่ใน Visual Studio เลือกโฟลเดอร์โซลูชัน Controllers ในหน้าต่าง Solution Explorer และคลิก“ Add -> Controller …” เพื่อสร้างคอนโทรลเลอร์ใหม่ชื่อ DefaultController เราจะใช้โครงการนี้ในส่วนถัดไปของบทความนี้

ติดตั้งแพ็คเกจ NuGet สำหรับ Serilog

ในการทำงานกับ Serilog คุณควรติดตั้งแพ็คเกจ Serilog จาก NuGet คุณสามารถทำได้ผ่านทางตัวจัดการแพ็คเกจ NuGet ภายใน Visual Studio 2019 IDE หรือโดยดำเนินการคำสั่งต่อไปนี้ที่คอนโซล NuGet package manager:

ติดตั้งแพ็คเกจ Serilog

ติดตั้งแพ็คเกจ Serilog.AspNetCore

ติดตั้งแพ็คเกจ Serilog.Sinks.MSSqlServer

ติดตั้งแพคเกจ Serilog การตั้งค่าการกำหนดค่า

เริ่มต้น Serilog ใน Program.cs ใน ASP.NET Core

ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นว่าคุณสามารถเสียบ Serilog กับ ASP.NET Core ได้อย่างไร สังเกตว่าวิธีการใช้ส่วนขยาย UseSerilog () ถูกใช้เพื่อตั้งค่า Serilog เป็นผู้ให้บริการการบันทึกอย่างไร

สาธารณะแบบคงที่ IWebHost BuildWebHost (string [] args) =>

            WebHost.CreateDefaultBuilder (args)

                   .UseStartup ()

                   .UseSerilog ()

                   .สร้าง();

สร้างโฮสต์เว็บตัวอย่างใน ASP.NET Core

โดยปกติเราจะต้องมีแอปพลิเคชันเพื่อแสดงการใช้ Serilog นี่คือซอร์สโค้ดที่สมบูรณ์ของคลาส Program สำหรับแอพตัวอย่างของเรา สังเกตว่าเรากำหนดค่าและสร้างโฮสต์เว็บอย่างไร

    โปรแกรมชั้นเรียนสาธารณะ

    {

        โมฆะคงที่สาธารณะ Main (สตริง [] args)

        {

            การกำหนดค่า IConfigurationRoot = ใหม่

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

            ทางเลือก: false, reloadOnChange: true) .Build ();

            Log.Logger = LoggerConfiguration ใหม่ () ReadFrom.Configuration

            (การกำหนดค่า) .CreateLogger ();

            BuildWebHost (args). Run ();

        }

        สาธารณะแบบคงที่ IWebHost BuildWebHost (string [] args) =>

            WebHost.CreateDefaultBuilder (args)

                .UseStartup ()

                .UseSerilog ()

                .สร้าง();

    }

อย่าลืมรวมเนมสเปซ Serilog ไว้ในโปรแกรมของคุณดังที่แสดงด้านล่าง:

ใช้ Serilog;

กำหนดการตั้งค่าการเชื่อมต่อฐานข้อมูลใน ASP.NET Core

เมื่อคุณสร้างโครงการ ASP.NET Core ใหม่ใน Visual Studio ไฟล์ appsettings.json จะถูกสร้างขึ้นตามค่าเริ่มต้น ที่นี่คุณสามารถระบุสตริงการเชื่อมต่อฐานข้อมูลและข้อมูลการกำหนดค่าอื่น ๆ เปิดไฟล์ appsettings.json จากโปรเจ็กต์ที่เราสร้างไว้ก่อนหน้านี้และป้อนข้อมูลต่อไปนี้:

{

  "Serilog": {

    "MinimumLevel": "ข้อมูล",

    "เขียนถึง": [

      {

        "ชื่อ": "MSSqlServer",

        "Args": {

          "connectionString": "แหล่งข้อมูล = LAPTOP-ULJMOJQ5; เริ่มต้น

           แคตตาล็อก = วิจัย;    

     รหัสผู้ใช้ = joydip; รหัสผ่าน = sa123 #; ",

          "tableName": "บันทึก",

          "autoCreateSqlTable": จริง

        }

      }

    ]

  }

}

สร้างตารางฐานข้อมูลเพื่อบันทึกข้อมูลใน SQL Server

คุณอาจต้องการสร้างตารางบันทึกด้วยตัวเองเช่นกัน ด้านล่างนี้คือสคริปต์ที่คุณสามารถใช้เพื่อสร้างตารางบันทึกในฐานข้อมูล SQL Server

สร้างตาราง [บันทึก] (

   [Id] int IDENTITY (1,1) ไม่ใช่โมฆะ,

   [ข้อความ] nvarchar (สูงสุด) NULL,

   [MessageTemplate] nvarchar (สูงสุด) NULL,

   [ระดับ] nvarchar (สูงสุด) NULL,

   [TimeStamp] datetimeoffset (7) ไม่ใช่ NULL,

   [ข้อยกเว้น] nvarchar (สูงสุด) NULL,

   [Properties] nvarchar (สูงสุด) NULL

   CONSTRAINT [PK_Log]

     คีย์หลักที่คลัสเตอร์ ([Id] ASC)

)

เมื่อคุณเรียกใช้แอปพลิเคชันตารางใหม่ชื่อ Log จะถูกสร้างขึ้นและเหตุการณ์การเริ่มต้น ASP.NET Core จะถูกบันทึกไว้ที่นั่น รูปที่ 1 ด้านล่างแสดงข้อมูลที่ถูกบันทึกไว้ในตาราง Log

บันทึกข้อมูลในวิธีการดำเนินการใน ASP.NET Core

คุณสามารถใช้ประโยชน์จากการฉีดข้อมูลอ้างอิงเพื่อฉีดอินสแตนซ์คนตัดไม้ในตัวควบคุมของคุณดังที่แสดงในข้อมูลโค้ดด้านล่าง:

คลาสสาธารณะ DefaultController: Controller

{

   ILogger _logger แบบอ่านอย่างเดียวส่วนตัว

   DefaultController สาธารณะ (ILogger logger)

   {

      _logger = คนตัดไม้;

   }

}

ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นว่าคุณสามารถใช้ประโยชน์จาก Serilog ในวิธีการดำเนินการของคอนโทรลเลอร์เพื่อบันทึกข้อมูลได้อย่างไร

คลาสสาธารณะ DefaultController: Controller

    {

        ILogger _logger แบบอ่านอย่างเดียวส่วนตัว

        DefaultController สาธารณะ (ILogger logger)

        {

            _logger = คนตัดไม้;

        }

        ดัชนี IActionResult สาธารณะ ()

        {

            _logger.LogInformation ("สวัสดีชาวโลก");

            กลับดู ();

        }

    }

แม้ว่าจะเป็นอิสระจาก. NET Core แต่ Serilog ก็เชื่อมต่อกับระบบนิเวศ ASP.NET Core ได้อย่างดีทำให้การบันทึกแบบมีโครงสร้างง่ายและสะดวก Serilog ยังใช้ประโยชน์จากซิงก์จำนวนมากในการส่งบันทึกไปยังเป้าหมายการบันทึกที่แตกต่างกันมากมายตั้งแต่ไฟล์ข้อความฐานข้อมูลไปจนถึงบริการ AWS, Azure และ Google Cloud ในโพสต์นี้ฉันได้แสดงให้เห็นว่าเราสามารถทำงานกับซิงก์ Microsoft SQL Server ได้อย่างไร ฉันจะพูดถึงคุณสมบัติขั้นสูงอื่น ๆ ของ Serilog ในโพสต์ในอนาคตที่นี่