دوره‌ای که می‌تونه مسیر شغلیت رو عوض کنه! دوره‌ای که می‌تونه مسیر شغلیت رو عوض کنه!
🎯 ثبت نام
بستن تبلیغات
تسلط کامل بر سی‌شارپ با یک دوره پروژه‌محور

یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شی‌گرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفه‌ای و امکانات کامل!

مشاهده بیشتر
تسلط جامع بر MVC Core برای توسعه وب حرفه‌ای

یادگیری MVC Core از مبانی تا پیشرفته: شی‌گرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژه‌های کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!

مشاهده بیشتر

آموزش بارگذاری در ASP.Net MVC Core

ASP.NET CORE 2.0 LOGGING

مشکل

چگونه از پیام ها(information, errors, warnings) در ASP.NET Core می توانیم log بگیریم.

راه حل

از یک پروژه empty شروع کنید(می توانید از مقاله ASP.NET CORE 2.0 EMPTY PROJECT استفاده کنید) و ILogger را به عنوان یک وابستگی(dependency) تزریق کنید و از متدهای مختلف(Log< Log-level >) استفاده کنید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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");
        }
    }
<button></button>

برنامه در حال اجرا پیام ها را در پنجره های Debug / Console نشان می دهد.

مباحثه

Framework قابلیت logging را از طریق ILoggerFactory فراهم می کند، که می توانید یک یا چند providers را attach کنید. providers بر روی داده های ثبت شده(logged data) در برخی از فرم ها عمل می کنند، برای مثال آن را به file ، database ، Azure و غیره وارد می کند.

هر دو ارائه دهنده built-in و third party وجود دارد و خود را با استفاده از متد AddProvider () به ILoggerFactory متصل می کنند، اما همه آنها متد های extension را بر روی ILoggerFactory به منظور ساده سازی این کار نمایش می دهند.

اگرچه به نظر می رسد جادویی است ASP.NET Core 2.0 اضافه کردن logging providers پشت متد CreateDefaultBuilder() از WebHost در Program.cs مخفی می کند.

برای دیدن این، روش BuildWebHost () را در Program.cs جایگزین کنید و برنامه را اجرا کنید، نتیجه مشابهی خواهید گرفت:

1
2
3
4
5
6
7
8
9
10
public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureLogging((context, builder) =>
                {
                    builder.AddConsole();
                    builder.AddDebug();
                })
                .UseStartup< Startup >()
                .Build();
<button></button>

برای استفاده از logging providers ، ILogger به عنوان یک وابستگی تزریق می شود، جایی که T نوعی logs است.. این دسته به طور معمول نام کامل کلاس است که در آن logs نوشته شده است و با هر پیام ورود به سیستم نوشته شده است.

Log Category

شما می توانید مقدار رده را با تزریق ILoggerFactory به عنوان وابستگی (به جای ILogger) و با استفاده از ILoggerFactoryبرتری دهید.متد CreateLogger() برای ساخت یک ILogger جدید:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  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
    }
<button></button>

Log Levels

هر log message که شما نوشتید دارای شدتی(severity) است که توسط LogLevel enum نشان داده شده است. در عمل شما از متدهای زیر پشتیبانی می کنید که بسته به فراخوانی ILogger.Log () و انتقال در سطوح ورود به سیستم است:

  • LogTrace / LogDebug: برای ورود اطلاعات مفید در طول توسعه و debugging.
  • LogInformation: برای ورود پیام هایی که جریان برنامه را نشان می دهند.
  • LogWarning: برای ورود به exceptions که می تواند مورد استفاده قرار گیرد.
  • LogError: برای وارد کردن exceptions که نمیتوان آنها را مدیریت کرد و شکست عملیات را نشان داد.
  • LogCritical: to log exceptions of serious consequences to the entire application.

Log Event ID

هر log message که می نویسید می تواند یک ID رویداد (عدد صحیح) داشته باشد، که برای گروه بندی پیام های یک نوع خاص مفید است. هر provider با ID رویدادش به شیوه خود مقابله خواهد کرد. در راه حل فوق شما می توانید خروجی کنسول را نشان دهید که در مربع های مربع نشان داده شده است. در راه حل فوق شما می توانید خروجی کنسول را نشان دهید که در براکت مربع نشان داده شده است.

نکته: از یک کلاس با constants یا static readonly fields برای نشان دادن ID رویدادها استفاده کنید.

Log Filters

شما می توانید log messages را با استفاده از روش AddFilter () فیلتر کنید:

1
2
3
4
5
6
7
8
9
10
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();
<button></button>

Third-party Providers

برای دیدن نحوه کار third-party provider مقاله (Structured Logging using Serilog) مطالعه کنید.

1396/08/15 2587 1288
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...