"> مقدمه‌ای بر NLog با استفاده از ASP.NET Core |آموزش .NET Core | ام اس پی سافت

مقدمه‌ای بر NLog با استفاده از ASP.NET Core

مقدمه‌ای بر NLog با استفاده از ASP.NET Core ، در این مقاله، نحوه‌ی پیاده سازی NLog با استفاده از ASP .NET Core را خواهیم آموخت. گزارش گیری بخشی بسیار مهم، بحرانی و ضروری از هر نرم‌افزار است. ما را در بررسی ماهیت مسائل و مشکلات یاری می‌کند. ASP.NET Core دارای پشتیبانی داخلی (تعبیه شده/built-in) برای گزارش گیری از APIها بوده و قادر به کار با ارائه دهندگان گزارش گیری گوناگون است.

با استفاده از این ارائه دهندگان داخلی، می‌توانیم گزارش‌های برنامه را به یک یا چند مقصد ارسال کنیم و نیز، می‌توانیم فریمورک‌های گزارش گیری شخص ثالث/واسطه، مانند Serilog، Nlog و …، را متصل کنیم.

NLog با استفاده از ASP.NET Core

NLog فریمورکی متن‌باز و منعطف است که با چندین پلتفرم از جمله .NET Standard، فریمورک Full (یعنی .NET framework 4.7)، Xamarin (Andriod و iOS)، Windows phone، و UWP کار می‌کند.

بکارگیری و گسترش NLog آسان است. همچنین، انعطاف پذیری بیشتری را از لحاظ پیکربندی فراهم می‌کند.

همچنین می‌توانیم پیکربندی گزارش گیری را در زمان اجرا تغییر دهیم. target/هدف برای ذخیره سازی، نمایش، و ارسال پیام‌های گزارش به مقصد معین شده بکار می‌رود.

NLog می‌تواند گزارشی را بصورت همزمان به یک یا چند target بنویسد. NLog بیش از ۳۰ target که شامل فایل، گزارش رویداد، پایگاه‌داده، ایمیل، کنسول و … می‌شود را فراهم می‌کند.

اگرقسمت اول  آموزش های ما را نخوانده‏ اید همواره می‏توانید در لینک‏ زیر مشاهده کنید.

در ادامه مراحل پیکربندی NLog در ASP.NET Core Application آمده است.

مرحله ۱ : افزودن وابستگی Nlog یا بصورت دستی یا با استفاده از NuGet به فایل csproj

می‌توانیم یک وابستگی NLog را با استفاده از NuGet از طریق اجرای فرمان‌های زیر اضافه کنیم.

PM> Install-Package NLog  
PM> Install-Package NLog.Web.AspNetCore  

دو فرمان فوق جهت افزودن وابستگی‌ها به فایل csproj بکار می‌روند.

<ItemGroup>  
  <PackageReference Include="Microsoft.AspNetCore.App" />  
  <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />  
  <PackageReference Include="NLog.Web.AspNetCore" Version="4.5.4" />  
  <PackageReference Include="NLog" Version="4.5.4" />  
</ItemGroup> 

مرحله ۲ :ایجاد فایل پیکربندی nlog

فایل پیکربندی NLog یک فایل XML است که حاوی امکانات مربوط به NLog است. این فایل باید با حروف کوچک نام گذاری شود و در root/فایل اصلی/ریشه ی پروژه مان قرار بگیرد.

دو عنصر اصلی وجود دارد که مورد نیاز همه ی پیکربندی ها است: targets (اهداف) و rules (قوانین).

می تواند عناصر دیگری، مانند extensions (افزایه ها)، include (شامل شدن)، و variables (متغیرها)، نیز داشته باشد.

با این حال، این ها اختیاری هستند و می تواننددر سناریوهای پیشرفته مفید واقع شوند.

عنصر targets یک گزارش، که توسط یک عنصر target تعریف شده است، را تعریف می کند.

دو صفت اصلی وجود دارد:

  • name (نام target)
  •  type (نوع target مانند – file، database و …)

همچنین صفات اضافی دیگری همراه با عنصر target موجود است اما آن ها به نوع target وابسته هستند؛ برای مثال  نوع target یک فایل است، نیاز است پارامتر filename، که برای تعریف نام فایل خروجی مورد استفاده قرار می گیرد، را تعریف کنیم.

جدای از این، عنصر target حاوی صفت layout (طرح) نیز، که فرمت داده های گزارش را تعریف می کند، است.

عنصر rules، target را با log level (سطح گزارش) نگاشت می کند. دارای عنصر logger (گزارشگیر) است که حاوی این نگاشت می باشد. عنصر logger دارای صفات زیر است.

  • name : نام الگوی logger
  • minlevel : سطح گزارش کمینه
  • maxlevel : سطح گزارش بیشینه
  • level : سطح گزارش یگانه (تکی)
  • levels : لیستی از سطوح گزارش که با علامت ویرگول جدا شده اند
  • writeTo : لیستی از targets جهت ارسال پیام که با علامت ویرگول جدا شده اند
  •  final : پس از اینکه یک قانون نهایی تطابق پیدا کرد، هیچ قانونی پردازش نمی شود
  • enabled : بر روی false (نادرست) تنظیم می شود تا قانون را بدون حذف، غیرفعال کند

مثال:

<?xml version="1.0" encoding="utf-8" ?>  
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="info" internalLogFile="internalLog.txt">  
    <extensions>  
        <add assembly="NLog.Web.AspNetCore" />  
    </extensions>  
    <!-- the targets to write to -->  
    <targets>  
        <!-- write to file -->  
        <target xsi:type="File" name="alldata" fileName="demo-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />  
        <!-- another file log. Uses some ASP.NET core renderers -->  
        <target xsi:type="File" name="otherFile-web" fileName="demo-Other-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />  
    </targets>  
    <!-- rules to map from logger name to target -->  
    <rules>  
        <logger name="*" minlevel="Trace" writeTo="alldata" />  
        <!--Skip non-critical Microsoft logs and so log only own logs-->  
        <logger name="Microsoft.*" maxLevel="Info" final="true" />  
        <loggername="*"minlevel="Trace"writeTo="otherFile-web" />  
    </rules>  
</nlog> 

این فایل باید در محلی که dll مربوط به پروژه قرار گرفته، موجود باشد. بنابراین، نیاز است “copy to bin folder” را فعال کنیم.

NLog با استفاده از ASP.NET Core

NLog با استفاده از ASP.NET Core

مرحله ۳ : پیکربندی NLog در برنامه

با استفاده از متد “UseNLog”، می توانیم NLog را در یک pipeline/خط لوله ی درخواست به عنوان یک وابستگی اضافه کنیم.

برای پی بردن به خطا در کلاس program (برنامه)، می توانیم یک کلاس logger راه اندازی کرده و پس از مقداردهی اولیه ی کلاس program، می توانیم با اطمینان مدیر گزارش (log manager) را خاموش کنیم.

public class Program  
{  
    public static void Main(string[] args)  
    {  
        var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();  
        try  
        {  
            logger.Debug("init main function");  
            CreateWebHostBuilder(args).Build().Run();  
        }  
        catch (Exception ex)  
        {  
            logger.Error(ex, "Error in init");  
            throw;  
        }  
        finally  
        {  
            NLog.LogManager.Shutdown();  
        }  
              
    }  
  
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>  
        WebHost.CreateDefaultBuilder(args)  
            .UseStartup<Startup>()  
            .ConfigureLogging(logging =>  
            {  
                logging.ClearProviders();  
                logging.SetMinimumLevel(LogLevel.Information);  
            })  
            .UseNLog();  
}  

در کد فوق، logging/گزارش گیری (یعنی SetMinimumLevel) را نیز پیکربندی کرده ایم.

logging می تواند توسط فایل appsettings.json بازنویسی شود. بنابراین، باید آن را بطور صحیح طبق نیازهای خود تنظیم کنیم.

پیش نمایش

همانطور که می دانیم، Logger بصورت ( DI ( dependency injection ( تزریق وابستگی) برای همه ی کنترل کننده ها بصورت پیش فرض موجود است، یک شیء ILogger در سازنده ی کلاس کنترل کننده دریافت می کنیم.

public class HomeController : Controller  
{  
    private readonly ILogger<HomeController> _logger;  
  
    public HomeController(ILogger<HomeController> logger)  
    {  
        _logger = logger;  
    }  
    public IActionResult Index()  
    {  
        _logger.LogInformation("HomeController.Index method called!!!");  
        return View();  
    }  
} 

خروجی

NLog با استفاده از ASP.NET Core

NLog با استفاده از ASP.NET Core

فرمت فایل می­تواند با استفاده از صفت layout/طرح در یک عنصر target تعریف شود.

خلاصه NLog با استفاده از ASP.NET Core

NLog فریمورکی متن­ باز برای گزارش گیری است. پیکربندی آن با ASP.NET Core Application آسان است.

در این مقاله، در رابطه با NLog ، پیکربندی گزارشگیری از فایل با ASP.NET Core 2  توضیح داده­ ایم.

می­توانید source code (کد منبع) را از لینک GitHub در اینجا مشاهده یا دانلود کنید.

  • پسورد: www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

کد تخفیف daneshjo-98 با ۵۰٪ تخفیف به مناسبت روز دانشجو