نحوه استفاده از کتابخانه 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);  
                }  
            }

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

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