چگونه NLog را در ASP.NET Core تنظیم (Config) کنیم؟

پنجشنبه 4 خرداد 1396

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

چگونه NLog را در ASP.NET Core تنظیم (Config) کنیم؟

Nlog چیست؟
درواقع NLog یک پلت فرم رایگان برای .NET ،.NET Standard  ، Xamarin ، Silverlight و Windows Phone با قابلیت های مسیریابی و مدیریتی است . NLog مراحل تولید و مدیریت لاگ های با کیفیت را برای اپلیکیشن تان ساده می سازد. البته با صرف نظر از اندازه (size) یا پیچیدگی. NLog به شکل مؤثری آسان برای تنظیم، قالب پذیری و توسعه پذیری است.

اضافه کردن NLog به ASP.NET Core
ابتدا یک پروژه ASP.NET Core با ویژوال استادیو 2015  یا بالاتر می سازیم. شما می توانید انتخاب کنید هر نوع پروژه ای را از MVC یا Web Api، NLog با هر دو آن ها کار می کند.
سپس swagger از Nuget با استفاده از Package Manager Console نصب می کنیم.
PM> Install-Package NLog.Web.AspNetCore
در این پروژه از نسخه 4.3.1 استفاده شده است.

نحوه ساخت یک فایل NLog.Config
یک فایل جدید Config می سازیم و نام آن را nlog.config می گذاریم. این فایل به یک NLog نیاز دارد تا موارد مورد انتخاب NLog را تنظیم کند.

<?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="Warn"
      internalLogFile="c:\temp\internal-nlog.txt">

  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>
  
  
  <!-- define various log targets -->
  <targets>
    <!-- write logs to file -->
    <target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"
                 layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />

   
    <target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-own-${shortdate}.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />

    <target xsi:type="Null" name="blackhole" />
  </targets>

  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
</nlog>

تنظیم (Config) NLog

کلاس Startup.cs را باز کنید و به متد Configure بروید سپس کدهای زیر را اضافه نمایید. در اینجا، loggerFactory.AddNLog() قابلیت NLog را به ASP.NET Core اضافه می کند. App.AddNLogWeb() درواقع NLog web را در پروژه تنظیم می کند و env.ConfigureNLog(“nlog.config”) از ریشه(root) پروژه nlog.config را تنظیم (config) می کند.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

{

    //add NLog to ASP.NET Core

    loggerFactory.AddNLog();

           

    //add NLog.Web

    app.AddNLogWeb();

           

    //needed for non-NETSTANDARD platforms: configure nlog.config in your project root. NB: you need NLog.Web.AspNetCore package for this.        

    env.ConfigureNLog("nlog.config");


    app.UseMvc(routes =>

    {

        routes.MapRoute(

            name: "default",

            template: "{controller=Home}/{action=Index}/{id?}");

    });

}

آغاز لاگ گیری

زمانی که تنظیمات پروژه را به درستی انجام دادید، ILogger را در Controller تزریق کنید برای پیاده سازی یک سیستم لاگ گیری سفارشی.

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
    _logger = logger;
    }

    public IActionResult Index()
    {
    _logger.LogInformation("Hello World!");
    return View();
    }
}

اکنون پروژه را اجرا کنید، دو فایل با نام های "nlog-all-2017-05-16.log" و “nlog-own-2017-05-16.log” دریافت می کنید. " nlog-all-2017-05-16.log" شامل همه لاگ ها در سطح سیستمی می شود و " nlog-own-2017-05-16.log" شامل لاگ های سفارشی شما می شود.

2017-01-15 07:31:27.4314||HomeController|INFO|  Hello World! |url: http://localhost/|action: Index

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید