نحوه استفاده از کتابخانه NLOG در Net.

در این مقاله دربراه کتابخانه NLOG در Net. صحبت خواهیم کرد.

نحوه استفاده از کتابخانه NLOG در Net.

Nlog یک کتابخانه دات نت است که  خطایابی با کیفیت بالا برای برنامه های شما ایجاد می کند..

 Nlog را میتواند از طریق Nuget دانلود کرد.

اهداف:

  برای موارد مثل نمایش ،نگهداری یا فرستادن پیام های Log  برای مقاصد دیگر استفاده میشود.

دو نوع هدف وجود دارد:

1-دریافت و مدیریت پیام ها

2-Buffer یا مسیریابی پیام ها برای هدف دیگر.

مثلا:

1-فایل

2-کنسول

3-پایگاه داده

4-EmailMessage

5-EventLog

در این مقاله روش اول و سوم را پیاده سازی میکنیم.

Layout :

Layout یکی از خصوصیات ار بیشترین اهداف است اگر ما یک Layout مشخصنداشته باشیم یک Layout به صورت پیش فرض وجود دارد:

${longdate}|${level:uppercase=true}|${logger}|${message}

قوانین که  ما در layout مشخص میکنیم قطعاتی از اطلاعات اضافی که با Log به هدف فرستاده خواهد شد .

اطلاعات اضافی شامل:

تاریخ و زمان جاری در فرمت های مختلف

سطح Log

نام منبع

اطلاعات درباره exception ها و اطلاعات دیگر

Log Level :

هرپیام tracing  همراه میشود با سطح log

 سطوح log  :

1-Off.

2-Fatal.

3-Error.

4-Warn.

5-Info.

6-Debug.

7-Trace.

حال یک مثال را ایجاد خواهیم کرد با استفاده از NLOG :

ما از NLOG در برنامه MVC و پایگاه داده Sql  استفاده میکنیم:

ساخت پایگاه داده برای Log Errors :

CREATE TABLE [dbo].[NLog_Error](  
[Id] [int] IDENTITY(1, 1) NOT NULL,  
[TimeStamp][DateTime2] NOT NULL,  
[Level] [nvarchar](50) NOT NULL,  
[Host] [nvarchar](max) NOT NULL,  
[Type] [nvarchar](50) NOT NULL,  
[Logger] [nvarchar](50) NOT NULL,  
[Message] [nvarchar](max) NOT NULL,  
[stacktrace] [nvarchar](max) NOT NULL,  
CONSTRAINT [PK_NLogError] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (  
PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,  
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,  
ALLOW_PAGE_LOCKS = ON  
) ON [PRIMARY]  
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

سپس یک برنامه از نوع mvc ایجاد میکنیم:

ساخت فایل Configuration برای NLOG :

NLog.config:


    <?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" throwExceptions="false"  
    internalLogFile="C:\NLogErrors\log.txt" >  
        <extensions>  
            <!-- load NLog.Extended to enable ASP.NET-specific functionality -->  
            <add assembly="NLog.Extended" />  
        </extensions>  
        <!--Define Various Log Targets-->  
        <targets >  
            <target name="console" xsi:type="ColoredConsole"  
    layout="${message}" />  
            <!--Write logs to File-->  
            <target name="file" xsi:type="File" fileName="C:\NLogErrors\ErrorLogFile.log"  
    layout="  
    --------------------- ${level}(${longdate})${machinename}-------------------- ${newline}  
    ${newline}  
    Exception Type:${exception:format=Type}${newline}  
    Exception Message:${exception:format=Message}${newline}  
    Stack Trace:${exception:format=Stack Trace}${newline}  
    Additional Info:${message}${newline}  
    " ></target>  
            <!--Write Logs to Database-->  
            <target xsi:type="Database" name="db-Details">  
                <!-- SQL command to be executed for each entry -->  
                <commandText>INSERT INTO [NLog_Error](TimeStamp,Level,Host,Type,Logger,Message,stackTrace)  
    VALUES(getutcdate(),@level,@host,@type,@logger,@message,@stacktrace)</commandText>  
                <!-- parameters for the command -->  
                <parameter name="@level" layout="${level}" />  
                <parameter name="@host" layout="${machinename}" />  
                <parameter name="@type" layout="${exception:format=type}" />  
                <parameter name="@logger" layout="${logger}" />  
                <parameter name="@message" layout="${message}" />  
                <parameter name="@stacktrace" layout="${exception:stacktrace}" />  
                <!-- connection string -->  
                <dbProvider>System.Data.SqlClient</dbProvider>  
                <connectionString>Data Source=MachineName;Initial Catalog=MyDataBase;Integrated Security=True;</connectionString>  
            </target>  
        </targets>  
        <!--End Targets-->  
        <rules>  
            <logger name="*" minlevel="trace" writeTo="file" />  
            <logger name="*" minlevel="trace" writeTo="db-Details" />  
        </rules>  
    </nlog>

حال یک کنترلر به نام Login  به شکل زیر میسازیم :


    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using System.Web.Mvc;  
    using Mvc_Security.Security;  
    using Mvc_Security.Models;  
    using System.Web.Script.Serialization;  
    using System.Web.Security;  
    using Newtonsoft.Json;  
    using NLog;  
    using System.Threading;  
    namespace Mvc_Security.Controllers   
    {  
        public class LoginController: Controller   
        {  
            Logger loggerx = LogManager.GetCurrentClassLogger();  
            // GET: /Login/  
            public ActionResult Index()   
            {   return View();  }  
            public ActionResult Login()  
            {  return View();  }  
            [HttpPost]  
            public ActionResult Login(User model, String returnUrl)  
            {  
                try   
                {  
                    int x = 0;  
                    int y = 5;  
                    int z = y / x;  
                }   
                catch (Exception ex)   
                {  
                    loggerx.ErrorException("Error occured in Login controller", ex);  
                    //logger.Error(ex);  
                }  
            }

نمایش خطاها در پایگاه داده :

نمایش خطاها در فایل :