Error Logging এবং Debugging Techniques in Elixir
Elixir তে Error Logging এবং Debugging অত্যন্ত গুরুত্বপূর্ণ বিষয়, যা কোড ডেভেলপমেন্টের সময় সফটওয়্যার বাগ সনাক্তকরণ এবং তাদের সমাধান করতে সহায়তা করে। Elixir এবং OTP এর শক্তিশালী টুলস এবং পদ্ধতিগুলি ব্যবহারের মাধ্যমে কোডের ত্রুটি লগ করা এবং সমস্যা সমাধান করা খুবই সহজ। এখানে আমরা Elixir তে Error Logging এবং Debugging Techniques নিয়ে আলোচনা করব।
1. Error Logging in Elixir
Error Logging এমন একটি প্রক্রিয়া, যেখানে প্রোগ্রাম রান করার সময় কোনো সমস্যা বা ত্রুটি ঘটলে, সেগুলি একটি লগ ফাইলে রেকর্ড করা হয়। Elixir তে Logger মডিউল ব্যবহার করে ত্রুটি লগ করা হয়।
Logger মডিউল:
Elixir তে Logger মডিউলটি টেক্সট লগের জন্য ব্যবহৃত হয় এবং এর মাধ্যমে আপনার প্রোগ্রাম রান করার সময় বার্তা, ত্রুটি এবং ইনফরমেশন রেকর্ড করা যায়। Logger মডিউলটি খুবই কনফিগারেবল এবং বিভিন্ন স্তরে লগ বার্তা জমা করতে সহায়তা করে।
Logger ব্যবহার করার পদ্ধতি:
defmodule MyModule do
require Logger
def my_function do
Logger.debug("This is a debug message.")
Logger.info("This is an info message.")
Logger.warn("This is a warning message.")
Logger.error("This is an error message.")
end
endএখানে, Logger.debug/1, Logger.info/1, Logger.warn/1, এবং Logger.error/1 ব্যবহার করে বিভিন্ন লেভেলের বার্তা লগ করা হয়েছে।
Log Level:
Elixir Logger তে বিভিন্ন log level ব্যবহার করা যায়, যা লগ মেসেজের গুরুত্ব নির্ধারণ করে:
:debug: ডেভেলপমেন্টে ব্যবহৃত হয়, এটি বিস্তারিত লগ বার্তা দেয়।:info: সাধারণ তথ্য প্রকাশ করতে ব্যবহৃত হয়।:warn: সতর্কবার্তা প্রদান করে।:error: ত্রুটি বা সমস্যা সনাক্ত করার জন্য ব্যবহৃত হয়।
Logger কনফিগারেশন:
Elixir Logger মডিউলের কনফিগারেশন config.exs ফাইলে করা যায়। আপনি লগের স্তর, আউটপুট ফরম্যাট, এবং স্টোরেজ পরিচালনা করতে পারেন।
config :logger, level: :infoএখানে, লগের স্তর :info নির্ধারণ করা হয়েছে, যার মানে শুধুমাত্র info, warn, এবং error স্তরের বার্তা দেখানো হবে।
File Output:
লগ বার্তাগুলি ফাইলে সংরক্ষণ করতে, আপনি Logger এর :backend কনফিগারেশন ব্যবহার করতে পারেন।
config :logger, :console,
format: "[$level] $message\n",
metadata: [:user_id]এটি লগ বার্তা কনসোলেই আউটপুট করবে, এবং আপনি বিভিন্ন metadata যেমন :user_id বা অন্যান্য অ্যাডিশনাল তথ্যও লগে দেখতে পারবেন।
2. Debugging Techniques in Elixir
Debugging এমন একটি প্রক্রিয়া, যেখানে কোডের মধ্যে যে ত্রুটি বা অস্বাভাবিক আচরণ ঘটছে, তা সনাক্ত এবং সমাধান করা হয়। Elixir তে বিভিন্ন ডিবাগিং টুল এবং কৌশল ব্যবহার করে আপনি ত্রুটি খুঁজে বের করতে পারেন।
a. IO.inspect/2 (Basic Debugging)
Elixir তে IO.inspect/2 ফাংশনটি একটি সাধারণ ডিবাগিং টুল হিসেবে ব্যবহৃত হয়। এটি ডেটা বা ভেরিয়েবল ইন্সপেক্ট করে কনসোলে প্রিন্ট করে দেয়, যাতে আপনি দেখতে পারেন আপনার কোডে কী ঘটছে।
defmodule MyModule do
def my_function(a, b) do
IO.inspect(a, label: "Value of a")
IO.inspect(b, label: "Value of b")
a + b
end
endএখানে, IO.inspect/2 ব্যবহার করা হয়েছে যাতে কোডের মধ্যে চলমান মানগুলি পর্যালোচনা করা যায়।
b. pry (Elixir's Interactive Debugger)
Elixir তে pry ডিবাগার ব্যবহার করে আপনি কোডের মধ্যবর্তী অবস্থায় থামিয়ে ইন্টারঅ্যাকটিভভাবে কোডের চলাচল পরীক্ষা করতে পারেন। এটি iex এর মাধ্যমে ব্যবহৃত হয়।
Installation:
mix deps.getUsage:
defmodule MyModule do
def my_function(a, b) do
pry()
IO.inspect(a)
IO.inspect(b)
a + b
end
endpry() পয়েন্টে থামিয়ে আপনি সেখানে iex কমান্ড চালিয়ে দেখতে পারেন কি ঘটছে।
c. :debugger (Advanced Debugging)
Elixir তে :debugger ব্যবহার করে আপনি একটি GUI ভিত্তিক ডিবাগিং টুল চালু করতে পারেন, যা কোডের মধ্যে ভ্যারিয়েবল মান, ফাংশন কল, এবং এক্সপ্রেশনগুলো বিশ্লেষণ করতে সাহায্য করে।
:debugger.start()এটি Elixir এর Erlang Debugger এর অংশ এবং আপনাকে GUI ভিত্তিক ডিবাগিং প্রদান করে।
d. Breakpoints in IEx (Interactive Debugging)
Elixir তে আপনি IEx (Interactive Elixir) এ breakpoints ব্যবহার করতে পারেন। এটি IEx.pry ব্যবহার করে, যেখানে আপনি কোডের মধ্যে ব্রেকপয়েন্ট স্থাপন করতে পারেন।
defmodule MyModule do
def my_function(a, b) do
IEx.pry() # Breakpoint here
IO.inspect(a)
IO.inspect(b)
a + b
end
endএটি IEx ব্যবহারকারী ইন্টারফেসে কোডের মাঝখানে থামিয়ে আপনাকে ডিবাগ করার সুযোগ দেয়।
3. Error Handling and Monitoring
Elixir তে error handling এবং monitoring খুবই গুরুত্বপূর্ণ। Try-catch, rescue, এবং supervision trees ব্যবহার করে আপনি ত্রুটির মোকাবেলা এবং সিস্টেম মনিটরিং করতে পারেন।
a. Try-Catch / Rescue:
Elixir তে try, catch, এবং rescue ব্যবহার করে ত্রুটি ধরতে এবং পরিচালনা করতে পারেন।
defmodule MyModule do
def risky_function do
try do
1 / 0
rescue
ArithmeticError -> "Division by zero error!"
end
end
endএখানে, try ব্লকের মধ্যে একটি ত্রুটি ঘটলে তা rescue ব্লক দ্বারা ধরতে এবং ম্যানেজ করতে সক্ষম হবে।
b. Supervision Trees:
Supervision Trees ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের ফোল্ট টলারেন্স উন্নত করতে পারেন। যদি কোনো GenServer বা প্রক্রিয়া ব্যর্থ হয়, তবে এটি স্বয়ংক্রিয়ভাবে পুনরুদ্ধার হবে।
defmodule MySupervisor do
use Supervisor
def start_link(_) do
Supervisor.start_link(__MODULE__, :ok, name: __MODULE__)
end
def init(:ok) do
children = [
{MyWorker, []}
]
Supervisor.init(children, strategy: :one_for_one)
end
endএখানে, Supervisor সিস্টেমটি MyWorker প্রক্রিয়াকে পর্যবেক্ষণ করবে এবং যদি এটি ব্যর্থ হয়, তবে এটি পুনরায় শুরু করবে।
সারসংক্ষেপ
- Error Logging: Elixir তে Logger মডিউল ব্যবহার করে আপনি বিভিন্ন ধরনের লগ বার্তা যেমন
debug,info,warn, এবংerrorলগ করতে পারেন। এটি কোডের ত্রুটি সনাক্ত এবং ম্যানেজ করতে সহায়তা করে। - Debugging Techniques: Elixir তে ডিবাগিংয়ের জন্য বিভিন্ন টুলস যেমন
IO.inspect/2,pry(), এবং:debuggerব্যবহার করা হয়। এছাড়া,IEx.pryএবং breakpoints ব্যবহার করে ইন্টারঅ্যাকটিভ ডিবাগিং করা যায়। - Error Handling: Elixir তে ত্রুটি হ্যান্ডলিং করার জন্য
try,catch, এবংrescueব্যবহার করা যায়। Supervision Trees এর মাধ্যমে সিস্টেমের ফোল্ট টলারেন্স নিশ্চিত করা যায়।
Read more