کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش ساختار Logging در ASP.NET Core 2

ساختار Logging در ASP.NET Core 2.

مشکل

نحوه کار با structured logging در ASP.NET Core و Serilog

راه حل

برنامه را از مقاله ای با موضوع (ASP.NET CORE 2.0 LOGGING) است آغاز کنید و Nuget Package های زیر را نصب کنید:

  • Serilog.AspNetCore
  • Serilog.Sinks.Literate
  • Serilog.Sinks.Seq

در فایل Program.cs ، Serilog را با استفاده از کلاس LoggerConfiguration پیکربندی کنید و یک نمونه از ILogger (که توسط CreateLogger بازگردانده شده است) در کلاس Serilog’s static Log ذخیره شود.

public static void Main(string[] args)  
      {  
          Log.Logger = new LoggerConfiguration()  
                      .WriteTo.LiterateConsole()  
                      .CreateLogger();  
  
         BuildWebHost(args).Run();  
      }  
  
      public static IWebHost BuildWebHost(string[] args) =>  
          WebHost.CreateDefaultBuilder(args)  
              .UseStartup< Startup >()  
              .UseSerilog()  
              .Build();  

استفاده از ILogger همان فرایند است که در مقاله قبلی ما شرح داده شده است، با این حال، با Serilog می توانیم ورود به سیستم را انجام دهیم.

public async Task Invoke(HttpContext context)  
    {  
        var message = new  
        {  
            GreetingTo = "James Bond",  
            GreetingTime = "Morning",  
            GreetingType = "Good"  
        };  
        this.logger.LogInformation("Inoke executing {@message}", message);  
  
        await context.Response.WriteAsync("Hello Logging!");  
  
        this.logger.LogInformation(  
            "Inoke executed by {developer} at {time}", "Tahir", DateTime.Now);  
    } 

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

آموزش ASP.Net MVC Core

مباحثه

Structured logging یک تکنیک است که semantic information را به عنوان بخشی از پیام های ورودی(messages being logged) وارد کند.

Serilog از قالب message استفاده می کند و شبیه به string.Format () در دات نت است.

چند جنبه جالب از template syntax عبارتند از :

  • از {} برای تعریف property names ها استفاده کنید برای نمونه {developer} در مثال بالا. این ها به عنوان metadata ذخیره می شوند و می توانند با استفاده از ذخیره سازی داده های ساخت یافته (مانند Seq، Azure) مورد استفاده قرار گیرند.
  • با استفاده از @ ساختار object حفظ می شود برای نمونه anonymous object مرتب شده(serialized) در JSON.

Enrichers

در Serilog، enrichers برای اتصال اطلاعات به هر رویداد ورودی استفاده می شود که می تواند با ذخیره سازی داده های ساخت یافته (به عنوان مثال Seq، Azure) برای viewing و filtering مورد استفاده قرار گیرد.

یک راه ساده برای انجام این کار ، هنگام پیکربندی Serilog ، از (.Enrich.WithProperty()) استفاده کنیم.

Log.Logger = new LoggerConfiguration()  
                           .Enrich.WithProperty("ApiVersion", "1.2.5000")  
                           .WriteTo.LiterateConsole()  
                           .CreateLogger();

Context

همانطور که در پست قبلی دیده ایم، یک دسته(category) را می توان به logged messages متصل کرد، که به طور معمول نام کامل کلاس است. این اطلاعات را می توان با ذخیره سازی داده های ساخت یافته (به عنوان مثال Seq، Azure) استفاده کرد. Serilog این مکانیزم را با اتصال متنی از طریق متد ForContext () انجام می دهد.

Log.Logger = new LoggerConfiguration()  
                    .Enrich.WithProperty("ApiVersion", "1.2.5000")  
                    .WriteTo.LiterateConsole()  
                    .CreateLogger()  
                    .ForContext< HelloLoggingMiddleware >();  

Sinks

Sinks در Serilog اشاره به مقصد log messages دارد برا ی نمونه: file، database یا console (در مثال ما).

من از Seq بعنوان مثال sink استفاده خواهم کرد تا نشان دهم که چگونه تمام متادیتایی (metadata) که ما اضافه کرده ایم در یک structured storage موجود است.

Log.Logger = new LoggerConfiguration()  
                          .Enrich.WithProperty("ApiVersion", "1.2.5000")  
                          .WriteTo.LiterateConsole()  
                          .WriteTo.Seq("http://localhost:5341")  
                          .CreateLogger()  
                          .ForContext< HelloLoggingMiddleware >();

آموزش ASP.Net MVC Core

توجه کنید که داده های ما توسط enricher، context و custom object اضافه شده و به عنوان جفت key/ value به نظر می رسد. اکنون می توانید برای فیلتر کردن داده ها و ایجاد dashboards در Seq استفاده کنید.

می توانید Source Code این مقاله را از لنیک زیر دانلود کنید.

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

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