مشخصات مقاله
-
1113
-
0.0
-
3407
-
0
-
0
آموزش MVC Core-آموزش Logging در MVC Core
آموزش MVC Core-آموزش Logging در MVC Core
مشکل
چگونه از پیام ها(information, errors, warnings) در ASP.NET Core می توانیم log بگیریم.
راه حل
از یک پروژه empty شروع کنید(می توانید از مقاله ASP.NET CORE 2.0 EMPTY PROJECT استفاده کنید) و ILogger را به عنوان یک وابستگی(dependency) تزریق کنید و از متدهای مختلف(Log
برنامه در حال اجرا پیام ها را در پنجره های Debug / Console نشان می دهد.
Framework قابلیت logging را از طریق ILoggerFactory فراهم می کند، که می توانید یک یا چند providers را attach کنید. providers بر روی داده های ثبت شده(logged data) در برخی از فرم ها عمل می کنند، برای مثال آن را به file ، database ، Azure و غیره وارد می کند.
برای استفاده از logging providers ، ILogger به عنوان یک وابستگی تزریق می شود، جایی که T نوعی logs است.. این دسته به طور معمول نام کامل کلاس است که در آن logs نوشته شده است و با هر پیام ورود به سیستم نوشته شده است. شما می توانید مقدار رده را با تزریق ILoggerFactory به عنوان وابستگی (به جای ILogger) و با استفاده از ILoggerFactoryبرتری دهید.متد CreateLogger() برای ساخت یک ILogger جدید: هر log message که شما نوشتید دارای شدتی(severity) است که توسط LogLevel enum نشان داده شده است. در عمل شما از متدهای زیر پشتیبانی می کنید که بسته به فراخوانی ILogger.Log () و انتقال در سطوح ورود به سیستم است: هر log message که می نویسید می تواند یک ID رویداد (عدد صحیح) داشته باشد، که برای گروه بندی پیام های یک نوع خاص مفید است. هر provider با ID رویدادش به شیوه خود مقابله خواهد کرد. در راه حل فوق شما می توانید خروجی کنسول را نشان دهید که در مربع های مربع نشان داده شده است. در راه حل فوق شما می توانید خروجی کنسول را نشان دهید که در براکت مربع نشان داده شده است. از یک کلاس با constants یا static readonly fields برای نشان دادن ID رویدادها استفاده کنید. شما می توانید log messages را با استفاده از روش AddFilter () فیلتر کنید:
برای دیدن نحوه کار third-party provider مقاله (Structured Logging using Serilog) مطالعه کنید.
شما دانشجویان گرامی می توانید فایل مربوط به این آموزش را از قسمت پایانی این مقاله دانلود نمایید .public class HelloLoggingMiddleware
{
private readonly RequestDelegate next;
private readonly ILogger< HelloLoggingMiddleware > logger;
public HelloLoggingMiddleware(
RequestDelegate next,
ILogger< HelloLoggingMiddleware > logger)
{
this.next = next;
this.logger = logger;
}
public async Task Invoke(HttpContext context)
{
this.logger.LogInformation(101, "Inoke executing");
await context.Response.WriteAsync("Hello Logging!");
this.logger.LogInformation(201, "Inoke executed");
}
}
مباحثه
هر دو ارائه دهنده built-in و third party وجود دارد و خود را با استفاده از متد AddProvider () به ILoggerFactory متصل می کنند، اما همه آنها متد های extension را بر روی ILoggerFactory به منظور ساده سازی این کار نمایش می دهند.
اگرچه به نظر می رسد جادویی است ASP.NET Core 2.0 اضافه کردن logging providers پشت متد CreateDefaultBuilder() از WebHost در Program.cs مخفی می کند.
برای دیدن این، روش BuildWebHost () را در Program.cs جایگزین کنید و برنامه را اجرا کنید، نتیجه مشابهی خواهید گرفت:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((context, builder) =>
{
builder.AddConsole();
builder.AddDebug();
})
.UseStartup< Startup >()
.Build();
Log Category
public class HelloLoggingMiddleware
{
// code removed for brevity
private readonly ILogger logger;
public HelloLoggingMiddleware(
RequestDelegate next,
ILoggerFactory loggerFactory)
{
this.next = next;
this.logger = loggerFactory.CreateLogger("Hello_Logging_Middleware");
}
// code removed for brevity
}
Log Levels
Log Event ID
Log Filters
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((context, builder) =>
{
builder.AddFilter((category, level) =>
category.Contains("Fiver.Asp.Logging.HelloLoggingMiddleware"));
})
.UseStartup< Startup >()
.Build();
Third-party Providers
برای دانلود Source Code این مقاله می توانید از لینک زیر استفاده کنید:
https://github.com/TahirNaushad/Fiver.Asp.Logging