पाठ 17 / 26

Options और Logging

Settings को typed class से bind करें और ILogger से structured logs लिखें।

Typed settings

Options pattern किसी configuration section को class से bind करता है, तो string keys की जगह options.PageSize पढ़ते हैं। ILogger<T> किसी भी अन्य service की तरह inject होता है और structured messages लिखता है।

Bind करें और उपयोग करें

String interpolation की जगह नामित placeholders वाले message templates उपयोग करें, ताकि log systems property से filter कर सकें।

builder.Services.Configure<ShopOptions>(builder.Configuration.GetSection("Shop"));

app.MapGet("/size", (IOptions<ShopOptions> opt, ILogger<Program> log) =>
{
    log.LogInformation("Page size is {PageSize}", opt.Value.PageSize);
    return opt.Value.PageSize;
});

public class ShopOptions { public int PageSize { get; set; } = 20; }

Secrets log न करें

Passwords, tokens या पूरी request bodies कभी log न करें। appsettings.json में category-वार न्यूनतम levels तय करें ताकि production में Debug messages की बाढ़ न आए।

त्वरित जाँच: Log calls में `$"{pageSize}"` की जगह `{PageSize}` placeholders क्यों बेहतर हैं?

  • वे तेज़ compile होते हैं
  • C# में ज़रूरी हैं
  • Values खोजने योग्य properties के रूप में रहती हैं
  • वे values को logs से छिपाते हैं
Answer

Values खोजने योग्य properties के रूप में रहती हैं — Message templates value को text से अलग रखते हैं, जिससे tools उस पर query और filter कर सकते हैं।