نحوه استفاده از کتابخانه NLOG در Net.
دوشنبه 14 اردیبهشت 1394در این مقاله دربراه کتابخانه 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); } }
نمایش خطاها در پایگاه داده :
نمایش خطاها در فایل :
- ASP.net MVC
- 3k بازدید
- 3 تشکر