ادغام NLog با ASP.NET Core Web Application

سه شنبه 6 آبان 1399

در برنامه‌های دنیای واقعی، مکانیسم لاگ کردن مناسب خطا برای ردیابی و اشکال‌زدایی رفتارهای غیرمنتظره برنامه ضروری است. در Asp.Net Core ما یک Logging API داخلی داریم که در Microsoft.Extensions.Logging قرار گرفته است که به عنوان یک پکیج NuGet ارائه می‌شود.

ادغام NLog با ASP.NET Core Web Application

با این API، ما می‌توانیم اطلاعات را با providerهای داخلی لاگ کردن مانند Console، Debug، EventListener، TraceListeners و غیره لاگ کنیم. برای گسترش تعداد providerها مایکروسافت با providerهای لاگ مختلف شخص ثالث مانند NLog، Serilog، Loggr، Log4Net و برخی موارد دیگر همکاری کرده است.

در این مقاله، ادغام Asp.Net Core با NLog، یکی از محبوب‌ترین providerهای لاگ شخص ثالث را بررسی خواهیم کرد.

مراحل ادغام

در این مقاله، ادغام NLog با برنامه وب Asp.Net Core را پوشش خواهیم داد. در این فرآیند سه کار وجود دارد که باید انجام دهیم:

1. افزودن NLog NuGet Package

2. افزودن NLog Configuration

3. افزودن NLog Provider

افزودن NLog NuGet Package

در اولین قدم باید NLog را از NuGet package manager نصب کنیم.

برای انجام این کار، از سولوشن بر روی پروژه کلیک راست کرده و از منو Manage NuGet Packages را انتخاب می‌کنیم. پنجره Package Manager Solution باز می‌شود.

از پنجره Package Manager، پکیج NLog.Web.AspNetCore NuGet را جستجو می‌کنیم، همانطور که در تصویر زیر نشان داده شده است.

سپس، آخرین نسخه را انتخاب کرده و بر روی Install کلیک می‌کنیم. در صورت نیاز به نسخه قبلی،  می‌توانیم از لیست کشویی مربوط به نسخه آن را انتخاب کنیم.

با انجام این کار NLog NuGet package برای پروژه ما نصب می‌شود. پس از دریافت پیام موفقیت، می‌توانیم به مرحله بعدی برویم، یعنی افزودن کانفیگ NLog.

افزودن NLog Configuration

بعد از نصب پکیج NuGet ی NLog باید آن را کانفیگ کنیم. اطلاعات کانفیگ برای NLog در داخل یک فایل configuration، به نام nlog.config در فولدر روت برنامه نگهداری می‌شود.

این nlog.config به صورت خودکار تولید نمی‌شود. بنابراین باید آن را به صورت دستی اضافه کنیم.

برای افزودن nlog.config، بر روی پروژه راست کلیک کرده و Add و سپس New Item را از منو انتخاب می‌کنیم. از پنجره Text file ,new item template را جستجو می‌کنیم.

همانطور که در تصویر زیر نشان داده شده است، فایل متنی را nlog.config نامگذاری کنید.

فایل کانفیگ NLog یک فایل پیکربندی مبنی بر XML است. در زیر حداقل کانفیگ مورد نیاز برای نوشتن اطلاعات لاگ در فایل موجود است.


    <?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">  
        <!-- the targets to write -->  
        <targets>  
            <!-- write to file -->  
            <target name="applog" xsi:type="File"   
            fileName="C:\Log\applog-${shortdate}.log"  
            layout="${longdate} - ${message} -   
            ${exception:format=StackTrace}${newline}" />  
        </targets>  
        <!-- rules to map from logger name to target -->  
        <rules>  
            <!-- all logs including Microsoft -->  
            <logger name="*" minlevel="Trace" writeTo="applog" />  
        </rules>  
    </nlog>  

طبق کانفیگ فوق، NLog یک فایل لاگ با نام applog-{today’s date}.log را در صورتی که از قبل وجود نداشته باشد، در مسیر C:\Log\ ایجاد می‌کند.

قانون لاگ حداقل log level مورد نیاز ما را اجرا می‌کند.

در اینجا ما فقط حداقل کانفیگ را پوشش داده‌ایم که اکسپشن‌های برنامه را در فایل لاگ گزارش می‌کند. برای دیدن گزینه‌های بیشتر کانفیگ می‌توانید به مستندات رسمی NLog  در GitHub مراجعه کنید.

در زمان build این فایل کانفیگ باید در پوشه Output کپی شود. برای انجام این کار، در سولوشن بر روی فایل nlog.config کلیک راست کرده و " Properties" را انتخاب کنید.

در پنجره Properties، در بخش " Advanced"، به پراپرتی Copy to Output Directory بروید و Copy if Newer را به عنوان مقدار آن انتخاب کنید.

حالا که بخش کانفیگ را به پایان رساندیم، می‌توانیم به مرحله آخر، افزودن NLog Provider برویم.

افزودن NLog Provider

برای افزودن NLog به عنوان یکی از logging provider ها باید متد CreateHostBuilder را در فایل Program.cs تغییر دهیم. قطعه کد زیر NLog logging provider را فعال خواهد کرد.

.ConfigureLogging((hostingContext, logging) => {                          
     logging.AddNLog(hostingContext.Configuration.GetSection("Logging"));  
}); 

همانطور که در این قطعه کد مشاهده می‌کنید، log level بر اساس Loggingconfiguration موجود در فایل appsettings.json اعمال خواهد شد.

در زیر کانفیگ پیش‌فرض لاگ است که ویژوال استودیو هنگام ایجاد پروژه جدید در فایل appsettings.json ایجاد می‌کند. شما می‌توانید طبق نیاز خود این log level را تغییر دهید.

برای کانفیگ سطح پیشرفته لاگ، لطفا به صفحه رسمی مایکروسافت مراجعه کنید.

با انجام این کارها، ما ادغام NLog با برنامه وب Asp.Net Core خود را کامل کردیم. حالا بیاید NLog log provider را با ایجاد یک اکسپشن تست کنیم.

تست NLog Provider

برای تست NLog Provider ما از Microsoft Logging API استفاده می‌کنیم. همان‌طور که در بخش معرفی ذکر شد، API در پکیج Microsoft.Extensions.Logging قرار گرفته است که در حال حاضر در قالب برنامه Asp.Net Core Web اضافه شده است.

اینترفیسی که ما برای لاگ کردن خطاها از آن استفاده می‌کنیم ILogger از فضای نام Microsoft.Extensions.Logging است. ILogger در کانتینر وابستگی برنامه در دسترس است زیرا WebHost builder سرویس Logging را همراه با سایر سرویس‌های لازم به کانتینر وابستگی اضافه کرده است.

بنابراین ما می‌توانیم نوع ILogger را از طریق سازنده HomeController خود تزریق کنیم، همان‌طور که در تصویر زیر نشان داده شده است.

سپس باید اکسپشن را در اکشن Index تولید کرده و آن را به آبجکت ILogger لاگ کنیم.

در اینجا ما یک اکسپشن تقسیم بر صفر ایجاد می‌کنیم و با logger API لاگ را انجام می‌دهیم. سپس می‌توانیم فایل لاگ را تایید کنیم.

فایل لاگ ایجاد شده است و اکسپشن به عنوان پارامترهای کانفیگ مشخص شده لاگ می‌شود.

جمع‌بندی

در این مقاله مراحل اصلی ادغام کتابخانه NLog با برنامه وب Asp.Net Core 3.1 را پوشش دادیم. چند provider لاگ دیگر وجود دارد که به عنوان پکیج‌های NuGet نیز در دسترس هستند.

ایمان مدائنی

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

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

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