آموزش ابزار لاگ‌گیری nLog برای دات‌نت

آموزش ابزار لاگ‌گیری nLog برای دات‌نت

آموزش ابزار لاگ‌گیری nLog برای دات‌نت

NLog : free open-source logging for .NET

NLog Logo

معرفی ابزار مدیریت لاگ nLog و نحوه استفاده از آن در NET.

 

سلام دوستان ، در خدمتتون هستیم با آموزش nLog که یکی از بهترین ابزار های موجود برای عمل لاگ گیری می باشد . در وب سایت Dotnetlogging لیست کاملی از انواع ابزارهای لاگ گیری را برای دات نت مشاهده می فرمایید .

 

تعریف عملیات لاگ‌گیری (Logging):

لاگ گیری به عمل ذخیره سازی اطلاعات درباره خطاها و رخدادهایی که در حین اجرای پروژه اتفاق می افتد را گویند که معمولا این ذخیره سازی با نوشتن در فایل text متنی همراه است .

نحوه نصب NLog :

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

 

دستور نصب NLog با تمام امکانات :

Install-Package NLog.Config

با نصب NLog ، دو تا فایل بنام های NLog.config , NLog.xsd به روت پروژه اضافه می شود . ما در این آموزش به فایل NLog.xsd کاری نداریم blush

شروع کار با NLog :

به این منظور ، باید فولدری بنام Infrastructure در روت پروژه ایجاد کنیم (دقت کنید که نام این فولدر اختیاریست ولی بهتر است Infrastructure باشد) و سپس در این فولدر یک کلاس Add میکنیم بنام LoggerProxy.cs که نام کلاس هم دلخواه است .

کلاس LoggerProxy را Public static تعریف میکنیم :

 public static class LoggerProxy { }

تعریف متغیری با نوع enum:

سپس یک Enumeration بنام Levels تعریف میکنیم که انواع رخدادهایی که ممکن است برای پروژه اتفاق بیافتد را در آن بیان میکنیم :

public enum LogLevels : int
{
Trace = 0,
Debug = 1,
Info = 2,
Warn = 3,
Error = 4,
Fatal = 5,
}

 

تعریف سازنده (Constructor) برای کلاس:

در این مرحله برای کلاس خود یک سازنده بصورت زیر تعریف میکنیم :

 static LoggerProxy()
{

 }

تعریف تابع اصلی Log:

تابع اصلی این کلاس یعنی Log را بصورت زیر تعریف میکنیم که در این مثال دارای ۵ پارامتر ورودی می باشد (تعداد پارامترها متغیر است ممکن است کمتر یا بیشتر از ۵ پارامتر به ان ارسال شود) :

public static void Log
(LogLevels level,System.Type type,string message,System.Exception exception=null,params object[] args)

پارامترهای تابع Log:

پارامتر اول این تابع level می باشد که از نوع enum می باشد که در بالا تعریف کردیم که ۶ عضو دارد . پارامتر بعدی یعنی type ، نوع کلاسی است که در آن متد Log صدا زده می شود (مانند NameSpace ها) . پارامتر بعدی message است . پیغامی است که می خواهیم به ازای رخداد موردنظر در فایل لاگ نوشته شود . پارامتر بعدی exception است که در هنگام بروز خطاها استفاده میشود و مثلا در موقع info این پارامتر null است . پس با مساوی null قرار دادن آن ، آنرا اختیاری یا optional تعریف کرده ایم . و پارامتر آخر نیز آرگومان ها می باشند که می توان از صفر تا بینهایت به آن پارامتر ارسال کنیم .

بدنه تابع Log:

بدنه تابع فوق نیز بصورت زیر است :

                         
NLog.Logger oLogger = NLog.LogManager.GetLogger(type.ToString());
switch (level) 
{
    case LogLevels.Debug:
    {
        oLogger.Debug(exception: exception, message: message, args: args);
        break;
    }
    case LogLevels.Error:
    {
        oLogger.Error(exception: exception, message: message, args: args);
        break;
    }
    case LogLevels.Fatal:
    {
        oLogger.Fatal(exception: exception, message: message, args: args);
        break;
    }
    case LogLevels.Info:
    {
        oLogger.Info(exception: exception, message: message, args: args);
        break;
    }
    case LogLevels.Trace:
    {
        oLogger.Trace(exception: exception, message: message, args: args);
        break;
    }
    case LogLevels.Warn:
    {
        oLogger.Warn(exception: exception, message: message, args: args);
        break;
    }
                                

مشاهده می شود که بر اساس نوع رخداد در پروژه ، یک event در لاگ موردنظر ایجاد شده است .

 

استفاده از متد Log :

به این منظور یک کنترولر بنام HomeController می سازیم و در آن یک اکشن بنام دلخواه مثلا LogSample تعریف میکنیم :

                         
public ActionResult LogSample() 
{
    Infrastructure.LoggerProxy.Log(Infrastructure.LoggerProxy.LogLevels.Debug, GetType(),"Debug …!");
    Infrastructure.LoggerProxy.Log(Infrastructure.LoggerProxy.LogLevels.Error, GetType(), "Error …!");
    Infrastructure.LoggerProxy.Log(Infrastructure.LoggerProxy.LogLevels.Fatal, GetType(), "Fatal Error …!");
    Infrastructure.LoggerProxy.Log(Infrastructure.LoggerProxy.LogLevels.Info, GetType(), "Info …!");
    Infrastructure.LoggerProxy.Log(Infrastructure.LoggerProxy.LogLevels.Trace, GetType(), "Trace …!");
    Infrastructure.LoggerProxy.Log(Infrastructure.LoggerProxy.LogLevels.Warn, GetType(), "Warn …!");
    return View();
}
                                

همانطور که مشاهده میکنید بعد از ذکر namespace تابعی که نوشتیم و سپس نام کلاس و درنهایت نام متد Log ، پارامترهای آن تابع را ارسال کرده ایم .

تنظیمات NLog در فایل nlog.config:

حال میخواهیم وارد بحث NLog Configuration شویم . بصورت پیش فرض ، یک تنظیماتی در فایل NLog.config در نظر گرفته می شود که می توان بر اساس نیاز خود ، این تنظیمات را تغییر دهیم و سفارشی کنیم . قابلیتهای جالبی در این بخش وجود دارد . همراه ما باشید تا آنها را بیان کنیم :

دستورات پیش فرض بصورت زیر می باشند :

 

<?xml version=”1.0″ encoding=”utf-8″ ?>
<nlog autoreload=”true” internallogfile=”c:\temp\nlog-internal.log” internalloglevel=”Off” throwexceptions=”false”
xmlns=”http://www.nlog-project.org/schemas/NLog.xsd” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemalocation=”http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd”>
<targets>
</targets>
<rules>
</rules>
</nlog>

 

المان targets بیانگر محل ذخیره سازی و یا نحوه ارسال لاگ (Log) می باشد و در rules نیز نوع رخداد و محل رخداد event ها را تعیین می کنیم .

 

مثالی از تعریف المان target و rule:

با ذکر یک مثال قضیه را واضح تر میکنیم :

                         

    


    
 
                           

در مثال فوق داریم :

  • در المان target ابتدا نام آنرا نوشتیم که دلخواه می باشد و سپس نوع لاگ گیری را بیان کرده ایم که در این مثال File است یعنی لاگ ها را داخل فایل متنی بنویس و نام این فایل نیز File1.txt می باشد .
  • در المان rule مثال فوق ، ابتدا نام آنرا مشخص میکنیم که * بیانگر تمام نام هاست . منظور از نام همان type در متد Log می باشد . بعنوان مثال اگر تابع Log را در کلاس program.cs صدا بزنیم که این کلاس در BLL NameSpace تعریف شده است و نام پروژه نیز MyApp باشد در این حالت پارامتر name برابر MyApp.BLL.program.cs می شود .
  • پارامتر minLevel نیز بیانگر نوع رخدادیست که میخواهیم لاگ گیری شود . در این مثال گفتیم minlevel برابر Trace باشد یعنی از کل رخدادهای پروژه لاگ گیری شود . زیرا Trace اولین level است و سایر رخدادها زیر مجموعه آن می باشند .
  • در پارامتر writeTo نیز گفتیم event های این rule را در Target1 ذخیره کن .

 

مفهوم کلی مثال فوق » هر اتفاقی که بیوفتد و در هر namespace ای که باشد ، در فایل File1.txt ثبت می شود .

 

مثالی برای ثبت لاگ هر نوع رخداد:

در این مثال می خواهیم لاگ های مربوط به هر نوع رخداد را در فایل جداگانه ای ثبت کنیم :

                         

    
    
    
    
    


    
    
    
    
    
    

                           

مشاهده می شود که لاگ های از نوع Trace را در فایل File1.txt ثبت کرده ایم و  لاگ های از نوع Debug را در فایل File2.txt ثبت کرده ایم و ….

مثالی برای ثبت رخدادهای مهم Fatal:

در مثال بعد می خواهیم تنظیماتی انجام دهیم که علاوه بر اینکه تمام لاگ ها را در File1 ثبت میکند ، رخدادهای Fatal را بدلیل اهمیتشان ، در فایل جداگانه ای ثبت کند :

                         

    
    


    
    

                           

مثالی برای ثبت رویدادها در یک فایال متنی و یا ارسال ایمیل:

رویکرد این مثال در مورد target می باشد . میخواهیم رخدادهای Target1 روزانه در فایل متنی مجزا نوشته شوند و Target2 به ایمیل مدیر سایت ارسال شوند :

 

<targets>
<wrapper-target xsi:type=”AsyncWrapper”>
<target archiveevery=”Day” filename=”File1.txt” name=”Target1″ xsi:type=”File”>
<target addnewlines=”true” enablessl=”false” encoding=”utf-8″ html=”true” name=”Target2″> priority=”” smtpauthentication=”Basic” smtppassword=”” smtpport=”25″ smtpserver=”” smtpusername=”” to=””
usesystemnetmailsettings=”false” xsi:type=”Mail” >
</target></target></wrapper-target>
</targets>

 

شرح مثال فوق:

همانطور که می بینید در Target1 پارامتر archiveEvery را برابر Day قرار دادیم . بنابراین هر روز ، رویدادهای همان روز را داخل فایلی بنام File1+Date ثبت میکند که Date تاریخ آنروز است . در Target2 نیز رویدادها را به ایمیل دلخواه میفرستیم که دارای پارامترهای بسیاری است و مربوط به پروتکل smtp می باشد .

آموزش ابزار لاگ گیری NLog در اینجا به پایان میرسد . امیدوارم استفاده لازم را برده باشید . لطفا دیدگاه ها و نظرات خود را درباره این مقاله ارسال نمایید wink

*** برای آموزش بیشتر NLog میتوانید به وب سایت GitHub مراجعه کنید .

این مقاله را در شبکه‌های اجتماعی به اشتراک بگذارید!

Share on facebook
Share on google
Share on linkedin
Share on telegram
Share on email

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

3 − دو =

مقالات اخیر

مقالات تصادفی

فهرست کلی مقالات

کتاب گوگل ادز

دانلود کتاب "آموزش سرویس گوگل ادوردز"

آموزش کامل فعال‌سازی HTTPS در وردپرس

دانلود کتاب "فعال‌سازی HTTPS در وردپرس"

دانلود رایگان کتاب الکترونیکی

معرفی بهترین ابزارهای بازاریابی محتوا در سال 2019

دانلود رایگان کتاب الکترونیکی "معرفی بهترین ابزارهای بازاریابی محتوا در سال 2019"