استفاده از Event Log در ASP.NET Core

 Event Log

استفاده از Event Log در ASP.NET Core در این مقاله، خواهیم دید که چگونه می توانیم از اطلاعات یا خطاها در Event Log (گزارش رویداد) با استفاده از Nlog در .NET Core Web API گزارش بگیریم.

Nlog ابزاری مفید و کاربردی جهت گزارشگیری از خطاها و این چنین اطلاعاتی در Event Log است. در این جا، بیایید فرآیند استفاده از Nlog برای گزارش گیری در .NET Core Web API را مشاهده کنیم.

اگرقسمت اول  آموزش های ما را نخوانده‏ اید همواره می‏توانید در لینک‏ زیر مشاهده کنید.

بیایید شروع کنیم.

Event Log

  •  Visual Studio را باز کرده و یک پروژه ی جدید ایجاد کنید.
  • ASP.NET Core Web Application را انتخاب کنید.
  • API را به عنوان یک قالب انتخاب کرده و دکمه ی OK را کلیک کنید.

Event Log

پکیج NuGet مربوط به Nlog.WindowsEventLog را اضافه کنید.

Event Log

بیایید یک رابط که دارای تمامی انواع متدهای مختلف جهت ذخیره ی گزارش ها ، مانند Debug (اشکال زدایی)، Warning (هشدار)، Information (اطلاعات)، Error (خطا) و …، است، ایجاد کنیم.

namespace CoreNLogEventLog  
{  
    public interface ILog  
    {  
        void Information(string message);  
        void Warning(string message);  
        void Debug(string message);  
        void Error(string message);  
    }  
} 

رابط فوق را در کلاس پیاده سازی کنید و نیز، CurrentClassLogger را از طریق LogManager مربوط به Nlog، یعنی logger، دریافت کنید.

نمونه ای از LogEventInfo را با نوع سطح گزارش، نام logger، و پیام، مقداردهی اولیه کنید.

using NLog;  
using System;  
using System.Collections.Generic;  
   
namespace CoreNLogEventLog  
{  
    public class LogNLog : ILog  
    {  
        private static ILogger logger = LogManager.GetCurrentClassLogger();  
   
        public LogNLog()  
        {  
        }  
   
        public void Debug(string message)  
        {  
            Logger logger = LogManager.GetLogger("EventLogTarget");  
            var logEventInfo = new LogEventInfo(LogLevel.Error, "EventLogMessage", $"{message}, generated at {DateTime.UtcNow}.");  
            logger.Log(logEventInfo);  
            //LogManager.Shutdown();  
        }  
   
        public void Error(string message)  
        {  
            logger.Error(message);  
        }  
   
        public void Information(string message)  
        {  
            logger.Info(message);  
        }  
   
        public void Warning(string message)  
        {  
            logger.Warn(message);  
        }  
    }  
} 

در startup.cs پیکربندی برای Nlog را بارگذاری کنید. برای زمان حال، نامی مانند nlog.config و مسیر ریشه را برگزینید.

در مرحله ی بعد، این فایل را اضافه و پیکربندی را ارئه خواهیم داد.

همچنین، نیاز است یک سرویس singleton (الگوی طراحی یگانه) از نوع Ilog به همراه یک پیاده سازی از نوع LogNLog اضافه کنیم.

using System;  
using System.Collections.Generic;  
using System.IO;  
using System.Linq;  
using System.Threading.Tasks;  
using Microsoft.AspNetCore.Builder;  
using Microsoft.AspNetCore.Hosting;  
using Microsoft.AspNetCore.Mvc;  
using Microsoft.Extensions.Configuration;  
using Microsoft.Extensions.DependencyInjection;  
using Microsoft.Extensions.Logging;  
using Microsoft.Extensions.Options;  
using NLog;  
   
namespace CoreNLogEventLog  
{  
    public class Startup  
    {  
        public Startup(IConfiguration configuration)  
        {  
            LogManager.LoadConfiguration(String.Concat(Directory.GetCurrentDirectory(), "/nlog.config"));  
            Configuration = configuration;  
        }  
   
        public IConfiguration Configuration { get; }  
   
        // This method gets called by the runtime. Use this method to add services to the container.  
        public void ConfigureServices(IServiceCollection services)  
        {  
            services.AddMvc();  
   
            services.AddSingleton<ILog, LogNLog>();  
        }  
   
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.  
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
        {  
            if (env.IsDevelopment())  
            {  
                app.UseDeveloperExceptionPage();  
            }  
   
            app.UseMvc();  
        }  
    }  
}

در nlog.config، نیاز است دو مسیر را برای گزارش گیری پیکربندی کنیم. یکی InternalLog و دیگری گزارش واقعی که می خواهیم بنویسیم است.

بنابراین ابتدا، مسیر فایل گزارش داخلی را برای صفت internalLogFile تعیین کرده و سپس، مسیر واقعی را در target (هدف) ارائه کنید.

کد اسمبلی که از طریق پکیج NuGet در زیر extensions (افزایه ها) اضافه کرده ایم را اضافه کنید.

همچنین، rule/قانونی که در آن به Error به عنوان سطح کمینه اشاره می کنیم را پیکربندی کرده و بر EventLog بنویسید.

<?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" internalLogLevel="Trace" internalLogFile="D:\AKKI_DEV\RND\CoreNLogEventLog\CoreNLogEventLog\LOG\InnerLog.txt">  
    <extensions>  
        <add assembly="Nlog.WindowsEventLog" />  
  </extensions>      
    <variable name="appName" value="NLogEventLog" />  
<targets>  
  <target xsi:type="EventLog" name="eventlog" source="${appName}" layout="${message}${newline}${exception:format=ToString}" Log="Application" machinename="."/>  
</targets>   
  <rules>  
        <logger name="*" writeTo="eventlog" minlevel="Error" />  
  </rules>  
</nlog> 

هنگامیکه پروژه ای با Web API ایجاد می کنیم، کنترل کننده ی مقادیر با عملیات های پیش فرض CRUD اضافه خواهد شد.

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

در اینجا، متدهای گزارش از نوع debug (اشکال زدایی) را از Controller فراخوانی کرده ایم.

using Microsoft.AspNetCore.Mvc;  
using System.Collections.Generic;  
   
namespace CoreNLogEventLog.Controllers  
{  
    [Route("api/[controller]")]  
    public class ValuesController : Controller  
    {  
   
   private ILog logger;  
        public ValuesController(ILog logger)  
        {  
            this.logger = logger;  
        }  
   
   
        // GET api/values  
        [HttpGet]  
        public IEnumerable<string> Get()  
        {  
            logger.Debug("Get API called of Values Controller");  
   
            return new string[] { "value1", "value2" };  
        }  
   
        // GET api/values/5  
        [HttpGet("{id}")]  
        public string Get(int id)  
        {  
            return "value";  
        }  
   
        // POST api/values  
        [HttpPost]  
        public void Post([FromBody]string value)  
        {  
        }  
   
        // PUT api/values/5  
        [HttpPut("{id}")]  
        public void Put(int id, [FromBody]string value)  
        {  
        }  
   
        // DELETE api/values/5  
        [HttpDelete("{id}")]  
        public void Delete(int id)  
        {  
        }  
    }  
} 

برنامه را اجرا کرده و متد GET از کنترل کننده ی مقادیر فراخوانی می شود. می توانیم نتیجه ی API را مشاهده کنیم.

Event Log

پنجره ی “Run” را باز کرده و eventvwr را، که Event Viewer را باز خواهد کرد، تایپ کنید.

Event Log

برنامه را از پنل سمت چپ باز کرده و می توانید گزارش خود را که پررنگ شده است بصورت زیر مشاهده کنید.

Event Log

می­توانید برنامه ­ی نمونه را از اینجا دانلود کنید.


زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.