با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش asp.net core در خدمت شما دوستان هستیم . در بخش قبل در رابطه با Logging توضیح دادیم و در ادامه همان بحث این عملیات را در کنسول توضیح می دهیم و در این جلسه به معرفی Logging در ASP.NET Core می پردازیم تا پایان این جلسه با ما همراه باشید.
برای انجام عملیات Logging در کنسول مراحل زیر را انجام می دهیم :
بسته Microsoft.Extensions.Logging.Console را از NuGet دانلود کرده و به وابستگی های پروژه اضافه می کنیم :
1 2 3 4 5 6 7 8 9 10 | "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.1", "type": "platform" }, "Microsoft.AspNetCore.Diagnostics": "1.0.0", "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", "Microsoft.Extensions.Logging.Console": "1.0.0" } |
لیست وابستگی های خارجی (NuGet و …) در فایل project.json ذخیره می شود. ویژوال استودیو بسته های موجود در این فایل را به طور خودکار بارگذاری می کند .
در نسخه جدیدتر ، به طور پیش فرض، Microsoft.Extensions.Logging.Console در بسته Microsoft.AspNetCore.All موجود است، بنابراین ما لازم نیست آن را به طور جداگانه در برنامه ASP.NET Core 2.x نصب کنیم.
برای استفاده از logger در کنسول، ابتدا باید آن را پیکربندی کنیم. ابتدا باید ConsoleLoggerProvider را با استفاده از LoggerFactory به لیست Provider ها اضافه کنیم.
کلاس LoggerFactory را قبلا در بالا مشاهده کردید ، این کلاس دارای متد AddProvider می باشد که اینترفیس ILoggerProvider را به لیست اضافه می کند.
بسته Microsoft.Extensions.Logging.Console شامل تمام کلاس های لازم است. بنابراین، می توانیم ConsoleLoggerProvider را همانطور که در زیر نشان داده شده پیاده سازی کنیم .
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Startup { public Startup() { } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddProvider(new ConsoleLoggerProvider((category, logLevel) => logLevel >= LogLevel.Information, false)); //code removed for clarity } } |
همانطور که در کدهای بالا می بینید ، نمونه ای از ConsoleLoggerProvider را به Provider ها اضافه کردیم. اکنون می توانیم عملیات Logging را آغاز کنیم. کنسول اطلاعات تمام log ها را طبق سطحشان نمایش می دهد.
ما همچنین می توانیم از متد AddConsole به جای پیکربندی کنسول logger به صورت دستی استفاده کنیم، همانطور که در زیر نشان داده شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Startup { public Startup() { } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); //code removed for clarity } } |
ASP.NET Core 2.x:
در نسخه جدیدتر ، متد CreateDefaultBuilder شامل Provider هایی برای انجام عملیات Log گیری در کنسول و اشکال زدایی می باشد. بنابراین نیازی به اضافه کردن آن در بخش Configure در ASP.NET Core 2.x نیست.
این مرحله برای هر دو برنامه ASP.NET Core 1.x و ۲ قابل اجرا است.
اکنون می توانیم Log های مربوطه را ایجاد کنیم و با استفاده از LoggerFactory نمونه ای از ILogger را در کنسول ایجاد کنیم و شروع به Log گیری کنیم.
همانطور که در زیر نشان داده شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Startup { public Startup() { } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); //start logging to the console var logger = loggerFactory.CreateLogger<ConsoleLogger>(); logger.LogInformation("Executing Configure()"); //code removed for clarity } } |
ما همچنین می توانیم از ILogger در هر برنامه کاربردی استفاده کنیم. ظرف IoC هرجا که ILogger در برنامه فراخوانی شود نمونه ای ConsoleLogger را تزریق می کند.
به عنوان مثال، می توانیم ILogger را در MVC-controller به شکل زیر استفاده کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class HomeController : Controller { ILogger _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogInformation("Executing Home/Index"); return View(); } } |
هنگامی که شما http: // localhost: 5000 / home / index را وارد می کنید Log بالا مشاهده خواهید کرد.
می توانیم از هر یک از Provider های Logging ساخته شده بالا به همین روش استفاده کنیم.
سطوح Log ها نشان دهنده کاربرد و شدت تاثیرگذاری آنها در سطحی خاص است . در ASP.NET Core سطوح زیر تعریف شده است.
توضیحات | متد توسعه یافته | شدت تاثیرگذاری | سطوح Log ها |
پیام هایی را Log میکند که فقط برای دنبال کردن هدفی خاص برای توسعه دهندگان است | LogTrace() | ۰ | Trace |
پیام هایی را Log میکند که فقط برای خطایابی اهداف کوتاه مدت هستند | LogDebug() | ۱ | Debug |
پیام هایی را Log میکند که در جریان اجرای برنامه اتفاق می افتند. | LogInformation() | ۲ | Information |
پیام هایی را Log میکند که در بروز وقایع غیر عادی و غیر منتظره در جریان برنامه رخ میدهند. | LogWarning() | ۳ | Warning |
پیغام های خطا را Log میگیرد | LogError() | ۴ | Error |
پیام هایی را Log میکند که که نیاز دارند فورا رفع شوند. | LogCritical() | ۵ | Critical |
ما می توانیم از متدهای توسعه یافته برای نشان دادن سطح پیام ها به صورت زیر استفاده کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class HomeController : Controller { ILogger _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index(string id) { _logger.LogInformation("Home/Index Executing.."); if (String. IsNullOrEmpty(id)) { _logger.LogWarning(LoggingEvents.GET_ITEM_NOTFOUND, "Index({ID}) NOT FOUND", id); return NotFound(); } return View(); } } |
در زیر برخی از ارائه دهندگان ثبت Log که با ASP.NET Core هماهنگ هستند آورده شده است :
توضیحات | Logging Provider |
ارائه دهنده ای برای سرویس Elmah.Io | elmah.io |
ارائه دهنده ای برای سرویس Logger | Loggr |
ارائه دهنده ای برای سرویس NLog | NLog |
ارائه دهنده ای برای سرویس Serilog | Serilog |
در بخش بعدی در مورد متغییر های محیطی (environment variables) در ASP.NET Core توضیح می دهیم.