ASP.NET Core-এ Logging এবং Monitoring অ্যাপ্লিকেশনের স্বাস্থ্য, কর্মক্ষমতা এবং ত্রুটি নির্ণয়ে গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলো ডেভেলপারদের অ্যাপ্লিকেশনের অভ্যন্তরীণ কার্যপ্রবাহ এবং সমস্যাগুলি চিহ্নিত ও সমাধান করতে সহায়তা করে।
Logging হলো একটি প্রক্রিয়া, যার মাধ্যমে অ্যাপ্লিকেশনের কার্যকলাপ এবং ত্রুটির তথ্য সংগ্রহ করে একটি নির্দিষ্ট অবস্থানে সংরক্ষণ করা হয়। এটি অ্যাপ্লিকেশনের কার্যপ্রবাহ বিশ্লেষণ এবং সমস্যার সমাধান করতে সহায়ক।
ASP.NET Core বিল্ট-ইন Logging ফ্রেমওয়ার্ক সরবরাহ করে, যা বিভিন্ন লেভেলে লগ তৈরি করতে পারে:
Logging এর ডিফল্ট কনফিগারেশন appsettings.json
ফাইলের মাধ্যমে সেট করা হয়।
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
ASP.NET Core-এ ILogger
ইন্টারফেস ব্যবহার করে Logging পরিচালনা করা হয়।
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Index action executed.");
return View();
}
}
ASP.NET Core-এ বিভিন্ন Third-party Logging Frameworks ইন্টিগ্রেট করা যায়, যেমন:
Serilog ইন্টিগ্রেশন উদাহরণ:
dotnet add package Serilog.AspNetCore
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
builder.Host.UseSerilog();
Monitoring অ্যাপ্লিকেশনের কর্মক্ষমতা এবং ব্যবহারকারীর আচরণ পর্যবেক্ষণের প্রক্রিয়া। এটি অ্যাপ্লিকেশনের সিস্টেম লেভেলের তথ্য, যেমন মেমোরি ইউজেজ, রেসপন্স টাইম, এবং ডাটাবেস কার্যকলাপ পর্যবেক্ষণ করতে ব্যবহৃত হয়।
ASP.NET Core অ্যাপ্লিকেশনের Monitoring-এর জন্য বিভিন্ন টুল ব্যবহার করা হয়:
Application Insights:
Application Insights সেটআপ উদাহরণ:
dotnet add package Microsoft.ApplicationInsights.AspNetCore
services.AddApplicationInsightsTelemetry();
ASP.NET Core-এ Middleware ব্যবহার করে Monitoring সেটআপ করা যায়।
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.Use(async (context, next) =>
{
var startTime = DateTime.UtcNow;
await next.Invoke();
var duration = DateTime.UtcNow - startTime;
Console.WriteLine($"Request duration: {duration.TotalMilliseconds} ms");
});
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
}
ASP.NET Core-এ বিল্ট-ইন Health Checks Middleware ব্যবহার করা যায়, যা অ্যাপ্লিকেশনের স্বাস্থ্য পর্যবেক্ষণ করতে সাহায্য করে।
dotnet add package Microsoft.AspNetCore.Diagnostics.HealthChecks
public void ConfigureServices(IServiceCollection services)
{
services.AddHealthChecks();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHealthChecks("/health");
}
Logging এবং Monitoring অ্যাপ্লিকেশনের কার্যকারিতা এবং সমস্যা চিহ্নিত করতে অপরিহার্য। সঠিকভাবে Logging এবং Monitoring ব্যবহার করলে ডেভেলপাররা দ্রুত সমস্যা সমাধান করতে পারে এবং অ্যাপ্লিকেশনের কর্মক্ষমতা উন্নত করতে পারে।
Logging হলো অ্যাপ্লিকেশনের মধ্যে তথ্য, ত্রুটি, এবং অন্যান্য লগ তৈরি এবং সংগ্রহ করার একটি প্রক্রিয়া। ASP.NET Core এর মধ্যে Logging ব্যবস্থাপনা বিল্ট-ইন রয়েছে, যা অ্যাপ্লিকেশন ডেভেলপারদের সহজে লগ ডেটা সংগ্রহ করতে এবং বিশ্লেষণ করতে সহায়ক। ASP.NET Core-এ লগিংয়ের জন্য কিছু গুরুত্বপূর্ণ কম্পোনেন্ট রয়েছে, যেমন ILogger, LogLevel, এবং Logging Providers।
ASP.NET Core-এর লগিং ব্যবস্থাপনা মূলত ILogger ইন্টারফেসের মাধ্যমে কাজ করে। ILogger বিভিন্ন স্তরের লগ তৈরি করতে এবং লগ তথ্য ফিল্টার করতে সহায়ক। এটি ডেটা রেকর্ড করার জন্য একটি এপিআই সরবরাহ করে যা ডেভেলপারদের বিভিন্ন ধরনের লগিং ইনফরমেশন যেমন ইনফরমেশন, ত্রুটি, ওয়ার্নিং ইত্যাদি তৈরি করতে সহায়তা করে।
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Index action called at {Time}", DateTime.Now);
return View();
}
}
এখানে, ILogger ব্যবহার করে Index
অ্যাকশনে লগ করা হয়েছে, যা তথ্য (Information) স্তরের লগ তৈরি করবে।
ASP.NET Core-এ লগিং স্তরগুলি বিভিন্ন ধরনের লগ তৈরি করতে সহায়ক, যা লগিং-এ তথ্যের গুরুত্ব এবং স্তর নির্ধারণ করে। এগুলো হল:
আপনি যখন লগ তৈরি করবেন, তখন আপনি লগ স্তরের নির্বাচন করতে পারেন:
_logger.LogError("An error occurred while processing your request.");
_logger.LogWarning("This is a warning message.");
ASP.NET Core বিভিন্ন Logging Providers সরবরাহ করে, যা আপনাকে লগ ডেটা এক বা একাধিক জায়গায় সংরক্ষণ করতে সহায়তা করে। কিছু সাধারণ লগিং প্রোভাইডার হল:
এগুলো কনফিগারেশন ফাইলে বা Startup.cs-এ কনফিগার করা হয়।
ASP.NET Core-এ লগিং কনফিগারেশন করার জন্য Program.cs বা Startup.cs ফাইলে লগ প্রোভাইডার ও লগ স্তর নির্ধারণ করা হয়। নিচে একটি সাধারণ কনফিগারেশন দেখানো হলো:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((context, logging) =>
{
logging.ClearProviders(); // ডিফল্ট প্রোভাইডার মুছে ফেলা
logging.AddConsole(); // কনসোল লগ প্রোভাইডার যোগ করা
logging.AddDebug(); // ডিবাগ প্রোভাইডার যোগ করা
logging.SetMinimumLevel(LogLevel.Information); // লগ স্তর নির্ধারণ
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
এখানে, AddConsole এবং AddDebug প্রোভাইডার যোগ করা হয়েছে এবং লগ স্তর হিসেবে Information নির্ধারণ করা হয়েছে, যার মানে হলো Information, Warning, Error, এবং Critical স্তরের লগ সংরক্ষণ হবে, কিন্তু Trace বা Debug স্তরের লগ সংরক্ষণ হবে না।
আপনি প্রতিটি প্রোভাইডারের জন্য আলাদা লগ স্তর ফিল্টার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি কেবলমাত্র Error
এবং তার উপরের লগ কনসোলে দেখতে চান তবে আপনি এইরকম কনফিগার করতে পারেন:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((context, logging) =>
{
logging.ClearProviders();
logging.AddConsole(options =>
{
options.LogToStandardErrorThreshold = LogLevel.Error;
});
logging.SetMinimumLevel(LogLevel.Information);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
ASP.NET Core এ Serilog ব্যবহার করে ফাইল লগিং কনফিগার করা খুবই জনপ্রিয়। প্রথমে Serilog এবং Serilog.Sinks.File প্যাকেজ ইনস্টল করতে হবে।
dotnet add package Serilog
dotnet add package Serilog.Sinks.File
এবং তারপর Program.cs ফাইলে Serilog কনফিগার করতে হবে:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((context, logging) =>
{
logging.ClearProviders();
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("app.log", rollingInterval: RollingInterval.Day)
.CreateLogger();
logging.AddSerilog();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
এখানে Serilog কনফিগার করা হয়েছে যাতে লগ ডেটা app.log ফাইলে এবং কনসোলে লেখা হবে।
ASP.NET Core-এর Logging ব্যবস্থাপনা আপনাকে অ্যাপ্লিকেশন থেকে লগ তথ্য সংগ্রহ করতে এবং তা বিশ্লেষণ করতে সহায়তা করে। লগ স্তরগুলি এবং বিভিন্ন প্রোভাইডার ব্যবহার করে আপনি লগিংকে কাস্টমাইজ করতে পারেন, যা ডেভেলপমেন্ট, ডিবাগিং এবং প্রোডাকশন পরিবেশে অত্যন্ত কার্যকর। ILogger
ইন্টারফেস, লগ স্তর (LogLevel), এবং বিভিন্ন লগ প্রোভাইডার (Console, Debug, File, etc.) এর মাধ্যমে আপনি অ্যাপ্লিকেশন পর্যবেক্ষণ করতে পারেন।
ASP.NET Core অ্যাপ্লিকেশন ডেভেলপমেন্টে লগিং একটি গুরুত্বপূর্ণ অংশ, কারণ এটি অ্যাপ্লিকেশনের কার্যকারিতা মনিটর করতে এবং সমস্যা ডিবাগ করতে সাহায্য করে। ASP.NET Core তার মধ্যে বিল্ট-ইন লগিং ফিচার সরবরাহ করে, তবে আরও উন্নত ফিচারের জন্য থার্ড-পার্টি লগিং ফ্রেমওয়ার্কও ব্যবহার করা যায়। এই নিবন্ধে, আমরা ASP.NET Core এর বিল্ট-ইন লগিং এবং থার্ড-পার্টি লগিং ফ্রেমওয়ার্ক নিয়ে আলোচনা করব।
ASP.NET Core একটি বিল্ট-ইন লগিং ফ্রেমওয়ার্ক সরবরাহ করে যা সাধারণ লগিং কার্যক্রম, যেমন ইনফরমেশন লগিং, ডিবাগ লগিং, এবং এরর লগিং পরিচালনা করতে সক্ষম। এটি খুবই কার্যকর এবং সহজে কনফিগার করা যায়।
ASP.NET Core এর বিল্ট-ইন লগিং ফিচারটি ILogger ইন্টারফেস ব্যবহার করে কাজ করে। আপনি অ্যাপ্লিকেশনের বিভিন্ন অংশে ILogger
ব্যবহার করে লগ তৈরি করতে পারেন এবং সেই লগগুলো একটি কনসোল, ফাইল, বা ডেটাবেসে স্টোর করতে পারেন।
ASP.NET Core অ্যাপ্লিকেশনে লগিং কনফিগার করতে, Startup.cs ফাইলে লগিং সেটিংস কনফিগার করা হয়। অ্যাপ্লিকেশনের ডিফল্ট লগিং সিস্টেম Serilog বা NLog নয়, বরং Microsoft.Extensions.Logging লাইব্রেরি ব্যবহার করে।
Startup.cs ফাইলে লগিং কনফিগার করা:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(config =>
{
config.AddConsole(); // কনসোল লগিং সক্রিয় করা
config.AddDebug(); // ডিবাগ লগিং সক্রিয় করা
config.AddEventSourceLogger(); // ইভেন্ট লগিং সক্রিয় করা
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger<Startup> logger)
{
logger.LogInformation("Application Started");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
}
}
এখানে, ILogger<Startup>
এর মাধ্যমে লগিং করা হয়েছে। আপনি বিভিন্ন স্তরের লগ (ইনফরমেশন, ওয়্যার্নিং, এরর) ব্যবহার করতে পারেন, যেমন:
logger.LogInformation("This is an info log");
logger.LogWarning("This is a warning log");
logger.LogError("This is an error log");
ASP.NET Core এর বিল্ট-ইন লগিং সিস্টেম বেশ কার্যকর হলেও, অনেক ডেভেলপার অতিরিক্ত ফিচারের জন্য থার্ড-পার্টি লগিং ফ্রেমওয়ার্ক ব্যবহার করতে পছন্দ করে। এদের মধ্যে সবচেয়ে জনপ্রিয় হলো Serilog, NLog, এবং log4net।
Serilog একটি আধুনিক এবং অত্যন্ত কনফিগারেবল লগিং ফ্রেমওয়ার্ক। এটি সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস লগিং সাপোর্ট করে এবং ডেটাবেস, ফাইল, এবং ক্লাউড সার্ভিসে লগ ডাটা পাঠানোর জন্য একটি দুর্দান্ত সমাধান।
Serilog এর ব্যবহার:
NuGet প্যাকেজ ইনস্টল:
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
Serilog কনফিগারেশন: Program.cs
ফাইলে Serilog কনফিগার করুন:
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseSerilog(); // Serilog ব্যবহার
}
Serilog এর মাধ্যমে আপনি সহজেই JSON ফরম্যাটে লগ করতে পারবেন এবং সেই লগগুলো বিভিন্ন সিস্টেমে পাঠাতে পারবেন যেমন Datadog, Elasticsearch, ইত্যাদি।
NLog একটি অত্যন্ত জনপ্রিয় এবং শক্তিশালী লগিং ফ্রেমওয়ার্ক যা ফাইল, ডেটাবেস, কনসোল, ইত্যাদি আউটপুট সমর্থন করে। NLog সাধারণত বৃহৎ অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়।
NLog এর ব্যবহার:
NuGet প্যাকেজ ইনস্টল:
dotnet add package NLog.Web.AspNetCore
dotnet add package NLog.Config
NLog কনফিগারেশন: Program.cs
ফাইলে NLog কনফিগার করুন:
public class Program
{
public static void Main(string[] args)
{
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
logger.Info("Application is starting");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
logger.Error(ex, "Stopped program because of an exception");
throw;
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureLogging((context, logging) =>
{
logging.ClearProviders();
logging.AddNLog();
});
}
NLog এর মাধ্যমে লগগুলোকে অনেক বেশি কাস্টমাইজ করা যায় এবং বিশেষত বৃহৎ অ্যাপ্লিকেশনগুলোতে এটি খুবই কার্যকরী।
log4net একটি জনপ্রিয় লগিং ফ্রেমওয়ার্ক যা দীর্ঘ সময় ধরে ব্যবহৃত হয়ে আসছে। এটি সহজে কনফিগারেবল এবং অনেক আউটপুট সাপোর্ট করে, যেমন ফাইল, ডেটাবেস, ইমেইল, ইত্যাদি।
log4net এর ব্যবহার:
NuGet প্যাকেজ ইনস্টল:
dotnet add package log4net
log4net কনফিগারেশন: log4net.config
ফাইল তৈরি করুন এবং লগ ফরম্যাট এবং আউটপুট কনফিগার করুন।
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="Logs/app.log"/>
<appendToFile value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="FileAppender"/>
</root>
</log4net>
log4net কনফিগারেশন কোড: Program.cs
ফাইলে লগ4নেট ব্যবহার করে লগ কনফিগার করুন।
log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
ASP.NET Core-এ বিল্ট-ইন লগিং ফিচার বেশ কার্যকরী এবং সহজে কনফিগার করা যায়, তবে কিছু উন্নত লগিং ফিচারের জন্য আপনি থার্ড-পার্টি ফ্রেমওয়ার্ক ব্যবহার করতে পারেন। Serilog, NLog, এবং log4net থার্ড-পার্টি ফ্রেমওয়ার্কগুলো বিভিন্ন ধরনের আউটপুট সাপোর্ট করে এবং ডেভেলপারদের
আরও কাস্টমাইজড লগিং সুবিধা প্রদান করে। আপনার অ্যাপ্লিকেশনের চাহিদা অনুসারে আপনি এগুলোর মধ্যে একটি নির্বাচন করতে পারেন।
Application Monitoring এবং Performance Tracking হলো এমন দুটি গুরুত্বপূর্ণ প্রক্রিয়া যা একটি অ্যাপ্লিকেশনের কার্যকারিতা, স্থিতিশীলতা এবং কর্মক্ষমতা পর্যবেক্ষণ করে। এটি ডেভেলপারদের অ্যাপ্লিকেশনের সমস্যা সনাক্ত করা, সমাধান করা এবং উন্নত কর্মক্ষমতা নিশ্চিত করতে সহায়তা করে। ASP.NET Core অ্যাপ্লিকেশনগুলির জন্য এটি অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে বড় স্কেল বা ক্লাউড-নেটিভ সিস্টেমে।
Application Monitoring হলো একটি অ্যাপ্লিকেশনের কার্যকলাপ পর্যবেক্ষণ করা, যেমন:
Performance Tracking একটি অ্যাপ্লিকেশনের বিভিন্ন কার্যকলাপের সময় এবং সম্পদের ব্যবহার নিরীক্ষণ করে। এটি অ্যাপ্লিকেশন কোথায় ধীরগতির, কোথায় অপ্টিমাইজেশনের প্রয়োজন তা নির্ধারণ করতে সাহায্য করে।
ASP.NET Core-এ Logging API বিল্ট-ইন থাকে, যা অ্যাপ্লিকেশনের কার্যকলাপ লগ করতে ব্যবহৃত হয়। এটি বিভিন্ন পর্যায়ের লগ প্রদান করে:
উদাহরণ:
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Home Page Accessed");
return View();
}
Microsoft এর Application Insights হলো একটি শক্তিশালী টুল যা Azure-এর সঙ্গে ইন্টিগ্রেট করা যায়। এটি:
ইন্টিগ্রেশন:
appsettings.json
ফাইলে Instrumentation Key যোগ করুন।Startup.cs
-এ services.AddApplicationInsightsTelemetry()
যোগ করুন।ELK Stack হলো ওপেন সোর্স টুলসের সমন্বয়, যা লগ ডেটা সংগ্রহ এবং ভিজ্যুয়ালাইজ করতে ব্যবহৃত হয়। এটি ASP.NET Core অ্যাপ্লিকেশন থেকে লগ সংগ্রহ করে এবং বিশ্লেষণ করতে সাহায্য করে।
Prometheus ডেটা সংগ্রহ করে এবং Grafana ডেটা ভিজ্যুয়ালাইজেশনের জন্য ব্যবহৃত হয়। এটি API রেসপন্স টাইম, রিকোয়েস্ট ফ্রিকোয়েন্সি এবং সার্ভার মেট্রিক্স ট্র্যাক করতে সাহায্য করে।
New Relic এবং Dynatrace হলো এন্টারপ্রাইজ গ্রেড টুলস, যা অ্যাপ্লিকেশন পারফরম্যান্স ট্র্যাকিং এবং ত্রুটি সনাক্তকরণের জন্য ব্যবহৃত হয়।
ASP.NET Core অ্যাপ্লিকেশনে লগ সংগ্রহ করার জন্য Middleware ব্যবহার করা যেতে পারে।
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.Use(async (context, next) =>
{
var watch = Stopwatch.StartNew();
await next();
watch.Stop();
Console.WriteLine($"Request took {watch.ElapsedMilliseconds} ms");
});
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
কাস্টম পারফরম্যান্স ট্র্যাকিং ইমপ্লিমেন্ট করতে:
public class PerformanceTrackerMiddleware
{
private readonly RequestDelegate _next;
public PerformanceTrackerMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
var stopwatch = Stopwatch.StartNew();
await _next(context);
stopwatch.Stop();
Console.WriteLine($"Request: {context.Request.Path}, Time: {stopwatch.ElapsedMilliseconds} ms");
}
}
Monitoring এবং Performance Tracking ASP.NET Core অ্যাপ্লিকেশনের স্থিতিশীলতা এবং কার্যকারিতা নিশ্চিত করতে অত্যন্ত গুরুত্বপূর্ণ। এটি ডেভেলপারদের সমস্যাগুলো দ্রুত সমাধান করতে এবং ব্যবহারকারীদের একটি মসৃণ অভিজ্ঞতা দিতে সহায়তা করে।
ASP.NET Core অ্যাপ্লিকেশনগুলিতে Exception Handling এবং Error Pages কাস্টমাইজ করা খুবই গুরুত্বপূর্ণ, কারণ এটি আপনার অ্যাপ্লিকেশনের ইউজার এক্সপেরিয়েন্স এবং সিস্টেমের স্থিতিশীলতা বজায় রাখতে সাহায্য করে। ASP.NET Core-এ এক্সসেপশন হ্যান্ডলিং এবং এরর পেজ কাস্টমাইজ করার জন্য কিছু বিল্ট-ইন মেকানিজম রয়েছে।
Exception Handling হল সেই প্রক্রিয়া যার মাধ্যমে অ্যাপ্লিকেশন ত্রুটি বা অপ্রত্যাশিত পরিস্থিতি ডিটেক্ট এবং হ্যান্ডেল করে। ASP.NET Core অ্যাপ্লিকেশনগুলিতে, আপনি অ্যাপ্লিকেশন চলাকালে কোনো এক্সসেপশন ঘটে গেলে তার জন্য কাস্টম প্রক্রিয়া সেট করতে পারেন।
ASP.NET Core অ্যাপ্লিকেশনে Exception Handling দুটি প্রধান জায়গায় কাজ করে:
ASP.NET Core অ্যাপ্লিকেশনে global exception handling সাধারণত middleware ব্যবহার করে করা হয়। এটি অ্যাপ্লিকেশন-wide এক্সসেপশন হ্যান্ডলিংয়ের জন্য সবচেয়ে সাধারণ পদ্ধতি।
আপনি UseExceptionHandler
middleware ব্যবহার করে অ্যাপ্লিকেশনের exception handling কাস্টমাইজ করতে পারেন। এটি এক্সসেপশন ঘটে গেলে একটি নির্দিষ্ট পেজ বা URL-এ রিডিরেক্ট করে।
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage(); // Development এ ডেভেলপার এক্সসেপশন পেজ দেখাবে
}
else
{
// Production-এ এক্সসেপশন হ্যান্ডলিং
app.UseExceptionHandler("/Home/Error"); // Error পেজে রিডিরেক্ট হবে
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
এখানে, যখন কোনো এক্সসেপশন ঘটে, তখন ব্যবহারকারীকে /Home/Error
পেজে রিডিরেক্ট করা হবে।
আপনার Error পেজ তৈরি করার জন্য একটি Controller তৈরি করুন।
public class HomeController : Controller
{
public IActionResult Error()
{
return View();
}
}
এখন, /Home/Error
এ একটি কাস্টম পেজ দেখাতে পারেন।
Views/Home/Error.cshtml ফাইলটি তৈরি করুন:
@{
ViewData["Title"] = "Error";
}
<h1>An error occurred while processing your request.</h1>
<p>Please try again later.</p>
এটি একটি সাধারণ error পেজ যা ব্যবহারকারীকে একটি সাধারণ ত্রুটির বার্তা দেখাবে।
ASP.NET Core-এ আপনি try-catch ব্লক ব্যবহার করে নির্দিষ্ট Controller Action বা মেথডে এক্সসেপশন হ্যান্ডলিং করতে পারেন। এটি একটি কাস্টম এক্সসেপশন হ্যান্ডলিং লজিক প্রয়োগ করতে ব্যবহৃত হয়।
public class ProductController : Controller
{
public IActionResult Details(int id)
{
try
{
var product = GetProductById(id); // একটি ফাংশন যা প্রোডাক্ট লোড করে
return View(product);
}
catch (ProductNotFoundException ex)
{
// কাস্টম এক্সসেপশন হ্যান্ডলিং
return View("Error", new ErrorViewModel { Message = "Product not found." });
}
catch (Exception ex)
{
// অন্য এক্সসেপশন হ্যান্ডলিং
return View("Error", new ErrorViewModel { Message = "An unexpected error occurred." });
}
}
}
এখানে ProductNotFoundException
যদি থ্রো হয়, তবে একটি কাস্টম মেসেজ ব্যবহারকারীকে দেখানো হবে, আর অন্য কোনো সাধারণ এক্সসেপশন হলে একটি জেনেরিক ত্রুটি বার্তা দেখানো হবে।
আপনি ASP.NET Core অ্যাপ্লিকেশনে বিভিন্ন ধরনের কাস্টম এরর পেজ তৈরি করতে পারেন, যেমন 404 Not Found বা 500 Internal Server Error। এই এরর পেজগুলো কাস্টমাইজ করা অ্যাপ্লিকেশন ব্যবহারকারীদের জন্য উন্নত এক্সপেরিয়েন্স তৈরি করে।
কাস্টম 404 Not Found পেজ তৈরির জন্য, আপনি UseStatusCodePagesWithReExecute
middleware ব্যবহার করতে পারেন। এটি যখন কোনো পৃষ্ঠা পাওয়া না যায়, তখন একটি কাস্টম 404 পেজ রিডিরেক্ট করবে।
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
// 404 Error handling
app.UseStatusCodePagesWithReExecute("/Home/StatusCode", "?code={0}");
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
এখানে, যদি 404 ত্রুটি হয়, তাহলে /Home/StatusCode
রুটে রিডিরেক্ট হবে এবং কোড প্যারামিটার হিসেবে ত্রুটির কোড পাঠানো হবে।
Views/Home/StatusCode.cshtml ফাইলটি তৈরি করুন:
@{
ViewData["Title"] = "Error";
}
<h1>Error @ViewData["code"]</h1>
<p>The page you requested could not be found.</p>
এটি একটি কাস্টম 404 পেজ যা ইউজারকে একটি ত্রুটি কোড সহ বার্তা প্রদর্শন করবে।
ASP.NET Core অ্যাপ্লিকেশনে Exception Handling এবং Error Pages কাস্টমাইজ করা খুবই গুরুত্বপূর্ণ, যা অ্যাপ্লিকেশনের স্থিতিশীলতা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে। Global Error Handling এবং Action-based Error Handling এর মাধ্যমে অ্যাপ্লিকেশনের এক্সসেপশন হ্যান্ডলিং কাস্টমাইজ করা যায়। এছাড়া, 404 Error বা 500 Error পেজ কাস্টমাইজ করে আপনি একটি সুন্দর ব্যবহারকারী অভিজ্ঞতা প্রদান করতে পারেন।
common.read_more