স্বাগতম! আজকে আমরা শিখতে যাচ্ছি Logging-এর দুনিয়ার আরেকটি কোর কনসেপ্ট—Logging Providers।
আপনার Outline অনুযায়ী, আমরা এখন Section 20: Logging-এর চতুর্থ লেকচার “269. Logging Providers”-এ আছি। আগের লেকচারে আমরা কনফিগারেশন করে দেখেছি যে কীভাবে Log Level সেট করতে হয়। কিন্তু এই Log-গুলো আসলে কোথায় গিয়ে স্টোর বা ডিসপ্লে হয়? আজকের লেকচারে আমরা সেই জায়গাগুলো নিয়েই জানব, যাদেরকে বলা হয় “Logging Providers”।
চলুন শুরু করা যাক!
📝 Short Summary for Quick Revision
-
Logging Providers কী: এটি হলো সেই ডেস্টিনেশন বা জায়গা যেখানে Logging Framework লগ মেসেজগুলো লেখে বা স্টোর করে।
-
Default Providers: ASP.NET Core-এ সাধারণত ৩টি প্রধান প্রোভাইডার ডিফল্টভাবে থাকে: Console, Debug এবং Event Log। (আরেকটি হলো Event Source, যা খুব একটা ব্যবহৃত হয় না)।
-
Where to find them: * Console: Kestrel Command Prompt-এ দেখা যায়।
-
Debug: Visual Studio-এর Output Window-তে দেখা যায়।
-
Event Log: Windows OS-এর Event Viewer-এ দেখা যায়।
-
Custom View in Event Viewer: শুধুমাত্র নিজের অ্যাপ্লিকেশনের লগ সহজে খুঁজে পেতে
.NET Runtimeসোর্স সিলেক্ট করে Custom View তৈরি করা যায়। -
Programmatic Config:
Program.csফাইলে কোড লিখে ডিফল্ট প্রোভাইডারগুলো ক্লিয়ার করে নিজের ইচ্ছেমতো প্রোভাইডার অ্যাড করা যায়।
🧠 Comprehensive Breakdown
এখানে আমরা লেকচারের প্রতিটি বিষয় বিস্তারিতভাবে আলোচনা করব এবং সাথে Code Implementation দেখব।
১. Logging Providers কী? (Priority: 10/10)
যখন আপনি Program.cs বা কোনো Controller থেকে একটি Log message লেখেন, তখন ASP.NET Core-এর Logging Framework সেটি একই সাথে কয়েকটি জায়গায় পাঠিয়ে দেয়। এই জায়গাগুলোকেই বলা হয় Logging Providers। ডিফল্টভাবে আপনার অ্যাপ্লিকেশন ৩টি প্রধান প্রোভাইডারে লগ পাঠিয়ে থাকে:
- Console Provider: লগগুলো Kestrel console বা টার্মিনালে দেখায়।
- Debug Provider: Visual Studio-এর Debuggers-এর জন্য লগ জেনারেট করে।
- Event Log Provider: Windows-এর নিজস্ব ইভেন্ট সিস্টেমে লগ পাঠায় (শুধুমাত্র Windows OS-এর জন্য)।
২. কোথায় এবং কীভাবে এই Logs দেখবেন? (Priority: 8/10)
- Console: অ্যাপ্লিকেশন রান করার পর টাস্কবারে Kestrel command prompt ওপেন করলে সেখানে কালারফুল লগগুলো দেখা যায়।
- Debug Window: Visual Studio-তে অ্যাপ্লিকেশন রান থাকা অবস্থায় নিচের দিকে
Outputউইন্ডোটি ওপেন করুন। এরপর ড্রপ-ডাউন মেনু থেকেDebugসিলেক্ট করুন। স্ক্রল করে_messageলিখে সার্চ করলে আপনার জেনারেট করা সব লগ এখানে দেখতে পাবেন। - Event Viewer: Start menu-তে গিয়ে “Event Viewer” লিখে সার্চ করে অ্যাপটি ওপেন করুন।
Windows Logs->Application-এ গেলে অনেক লগ দেখতে পাবেন। তবে আপনার .NET অ্যাপের লগগুলোরSourceহবে.NET Runtime।
৩. Event Viewer-এ Custom View তৈরি করা (Priority: 7/10)
Event Viewer-এ পুরো সিস্টেমের হাজার হাজার লগ থাকে। সেখান থেকে শুধু আপনার অ্যাপের লগ ফিল্টার করার জন্য একটি Custom View তৈরি করা হলো বেস্ট উপায়।
- কীভাবে করবেন: ডানদিকের প্যানেল থেকে “Create Custom View”-তে ক্লিক করুন।
- Time সিলেক্ট করুন “Last 24 hours” (যাতে লোড হতে সময় কম লাগে)।
- Event level-এ Warning, Error, Critical ইত্যাদি সিলেক্ট করুন।
- By source ড্রপ-ডাউন থেকে .NET Runtime সিলেক্ট করে OK দিন এবং একটি নাম দিন (যেমন:
My.NET App)। এখন আপনি শুধু আপনার অ্যাপ্লিকেশনের লগগুলোই সুন্দরভাবে দেখতে পাবেন।
৪. Event Log-এর Minimum Level পরিবর্তন (Priority: 8/10)
Event Log-এর ডিফল্ট Minimum Log Level হলো Warning। অর্থাৎ, Information বা Debug মেসেজগুলো এখানে দেখা যায় না। এটি পরিবর্তন করতে চাইলে appsettings.Development.json ফাইলে Logging সেকশনের ভেতর আলাদা করে EventLog ব্লক যোগ করতে হয়।
Code Implementation:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
},
"EventLog": {
"LogLevel": {
"Default": "Debug"
}
}
}
}
Note: Windows Event Log-এ Critical বলে আলাদা কোনো ক্যাটাগরি নেই, তাই Critical লগগুলোকেও সে Error হিসেবেই ডিসপ্লে করে।
৫. Program.cs-এ Providers কনফিগার করা (Priority: 10/10)
আপনার যদি মনে হয় যে “আমার সব প্রোভাইডারের দরকার নেই, আমি শুধু Console-এ লগ দেখতে চাই”, তাহলে আপনি কোডের মাধ্যমে বাকিগুলোকে ডিজেবল করতে পারেন।
Code Implementation (As per Transcript):
var builder = WebApplication.CreateBuilder(args);
// ডিফল্ট প্রোভাইডার ক্লিয়ার করে নিজের মতো অ্যাড করা
builder.Host.ConfigureLogging(loggingProvider =>
{
loggingProvider.ClearProviders(); // Console, Debug, EventLog সব রিমুভ করে দেবে
loggingProvider.AddConsole(); // শুধু Console প্রোভাইডার অ্যাড করবে
loggingProvider.AddDebug(); // চাইলে Debug অ্যাড করতে পারেন
// loggingProvider.AddEventLog(); // এটি কমেন্ট করা থাকলে Event Viewer-এ লগ যাবে না
});
var app = builder.Build();
Why: অপ্রয়োজনীয় প্রোভাইডারে লগ রাইট করা সিস্টেমের মেমরি এবং প্রসেসিং পাওয়ার নষ্ট করে। তাই শুধুমাত্র প্রোডাকশনে যে প্রোভাইডারগুলো লাগবে, সেগুলোই চালু রাখা উচিত।
🚀 Best Practices & .NET Modern Updates
Best Practices for Logging Providers:
- Event Log Avoidance: Event Log Provider শুধু Windows-এ কাজ করে। আপনি যদি আপনার অ্যাপ Linux সার্ভারে বা Docker-এ হোস্ট করেন, তবে এটি কাজ করবে না এবং অযথাই ইরর বা ওভারহেড তৈরি করতে পারে।
- Production Logs: প্রোডাকশন লেভেলে Console বা Debug প্রোভাইডারের ওপর নির্ভর না করে File বা Database প্রোভাইডার ব্যবহার করা উচিত। এর জন্য Serilog বা NLog-এর মতো থার্ড-পার্টি লাইব্রেরি ব্যবহার করাটাই ইন্ডাস্ট্রির বেস্ট প্র্যাকটিস (যা আপনারা সামনের লেকচারগুলোতে শিখবেন)।
Modern .NET Updates (.NET 10 approach):
লেকচারে builder.Host.ConfigureLogging(...) ব্যবহার করে প্রোভাইডার কনফিগার করা হয়েছে, যা একটু পুরনো স্টাইল। আধুনিক .NET 8 বা .NET 10-এ Minimal API আর্কিটেকচারে এটি আরও সহজ এবং ক্লিন করা হয়েছে। এখন সরাসরি builder.Logging প্রোপার্টি ব্যবহার করা হয়:
.NET 10 Code Implementation:
var builder = WebApplication.CreateBuilder(args);
// .NET 10-এ অনেক সহজে সরাসরি Logging প্রোপার্টি কল করা যায়
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Logging.AddEventLog();
var app = builder.Build();
app.MapGet("/", (ILogger<Program> logger) =>
{
logger.LogInformation("This is logged only to configured providers.");
return "Hello World";
});
app.Run();
এই পদ্ধতিটি কোডকে অনেক বেশি রিডেবল রাখে। আশা করি আজকের লেকচারটি আপনি পুরোপুরি বুঝতে পেরেছেন! সামনের লেকচারগুলোতে Controller-এর ভেতর Logging-এর বাস্তব প্রয়োগ আরও ইন্টারেস্টিং হবে।