با استفاده از NLog و ASP.NET Core 3.1 برای ورود به دیتابیس – وبلاگ Kaloyan Drenski

با استفاده از NLog و ASP.NET Core 3.1 برای ورود به دیتابیس – وبلاگ Kaloyan Drenski

در این پست کوتاه وبلاگ می خواهم به شما نشان بدهم که چگونه با استفاده از ASP.NET Core و NLog به پایگاه داده وارد شوید.

فرض می کنم شما قبلاً یک پروژه اصلی ASP.NET دارید ، بنابراین می خواهیم از این مرحله پرش کنیم. اگر اینکار را نکنید ، می توانید یک پروژه API ساده ایجاد کنید تا این کار را انجام دهید.

1. نصب NLog و SqlClient

این خطوط را به خود اضافه کنید. csproj پرونده ، در داخل مورد NLog.Extensions.Logging به تنهایی لازم نیست ، اما این امکان را به ما می دهد تا از پیکربندی که مستقیماً به پیوند می یابد استفاده کنیم ، همانطور که مشاهده می کنید. بیت.

2. پرونده nlog.config را ایجاد کنید و این را اضافه کنید:




  
  
    
  

  
  
    
      
      
      
      
      
      
      
      
    
  

  
  

    
    
    
    
  

بعد ، در داخل ویژوال استودیو ، روی این پرونده راست کلیک کرده و روی Properties کلیک کنید. سپس را انتخاب کنید. اگر [جدیدتراست را در برابر کپی کنید تا فهرست خروجی کپی کنید. ما از کلید واژه پیکربندی استفاده می کنیم که به لطف بسته [N NLog.Extensions.Logging موجود است.

همچنین ، localLogFile = "temp داخلی-nlog.txt " یک پوشه temp را در داخل پروژه شما ایجاد می کند و این پرونده متنی را با سیاهههای مربوط به NLog پر می کند. این به شما کمک می کند تا در آینده مشکلات مربوط به NLog را حل کنید.

3. رشته اتصال را در داخل appsettings.json اضافه کنید تا با پرونده پیکربندی

   "Logging" مطابقت داشته باشد: {
    "IncludScopes": نادرست ،
    "LogLevel":
      "پیش فرض": "ردیابی" ،
      "مایکروسافت": "هشدار" ،
      "Microsoft.Hosting.Lifetime": "اطلاعات"
    ،
    "NLog": "Server = (localdb) \ MSSQLLocalDB؛ فروشگاه اینترنتی اولیه = YOUR_DATABASE_HERE؛ امنیت یکپارچه = SSPI؛"
  }

4. یک دیتابیس جدید ایجاد کنید (اگر قبلاً آن را ندارید) و YOUR_DATABASE_HERE را با نام خود

5 جایگزین کنید. این روش را در داخل پایگاه داده خود انجام دهید تا یک جدول NLog که در آن سیاهههای مربوط شما ساکن خواهند بود

 CREATE TABLE [dbo] را ایجاد کنید. [NLog] (
   [ID] [int]  هویت (1،1) نه تنها ،
   [MachineName] [nvarchar] (200) NULL ،
   [Logged] [datetime]  NULL ،
   [Level] [varchar] (5) NULL نیست ،
   [Message] [nvarchar] NULL ،
   [Logger] [nvarchar] (300) NULL ،
   [Properties] [nvarchar] (حداکثر) NULL ،
   [Callsite] [nvarchar] (300) NULL ،
   [Exception] [nvarchar] (حداکثر) NULL ،
 CONSTRAINT [PK_dbo.Log] KEY CLOWERED KEY اولیه ([ID] ASC)
   با (PAD_INDEX = خاموش ، STATISTICS_NORECOMPUTE = خاموش ، IGNORE_DUP_KEY = خاموش ، ALLOW_ROW_LOCKS = روشن ، ALLOW_PAGE_LOCKS = روشن) در [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]؛

برو

ایجاد روند [dbo]. [NLog_AddEntry_p] (
  machineName nvarchar (200) ،
  @ بارگیری داده ،
  level varchar (5) ،
  message nvarchar (حداکثر) ،
  logger nvarchar (300) ،
  properties nvarchar (حداکثر) ،
  callsite nvarchar (300) ،
  exception nvarchar (حداکثر)
) مانند
شروع
  INSERT INTO [dbo]. [NLog] (
    [MachineName] ،
    [Logged] ،
    [Level] ،
    [Message] ،
    [Logger] ،
    [Properties] ،
    [Callsite] ،
    [Exception]
  ) ارزش های (
    machineName ،
    logged ،
    @مرحله،
    message ،
    @متمرکز ساز،
    properties ،
    callsite ،
    @استثنا
  )؛
پایان

6. ورود به سیستم را در داخل برنامه [عمومی Program.cs

 اضافه کنید
    {
        خلأ استاتیک اصلی اصلی (رشته [] استدلال می کند)
        {
            var logger = NLogBuilder.ConfigureNLog ("nlog.config"). GetCurrentClassLogger ()؛
            تلاش كردن
            {
                logger.Debug ("شروع سازنده میزبان")؛
                BuildHostBuilder (args) .Build () اجرای ()؛
            }
            گرفتن (استثناء استثنا)
            {
                logger.Error (استثناء ، "برنامه متوقف شد زیرا به استثنا")؛
                پرت كردن؛
            }
            سرانجام
            {
                NLog.LogManager.Shutdown ()؛
            }
        }

        استاتیک عمومی IHostBuilder CreatHostBuilder (رشته [] استدلال می کند) =>
            Host.CreateDefaultBuilder (استدلال)
              .ConfigureWebHostDefaults (وبBuilder =>)
              {
                  webBuilder.UseStartup  ()؛
              })
              .ConfigureLogging (ورود =>
              {
                  logging.ClearProviders ()؛
                  logging.SetMinimumLevel (LogLevel.Trace)؛
              })
              .UseNLog ()؛
    }

7. تزریق ILogger به کنترل

در داخل کنترلر ، بیایید آن را ProductsController بنامیم ، رابط ILogger private readonly ILoggerlog