লগিং একটি গুরুত্বপূর্ণ কার্যকারিতা যা অ্যাপ্লিকেশনের কার্যকারিতা পর্যবেক্ষণ, সমস্যা ডিবাগিং এবং সিস্টেমের কার্যকরী অবস্থা নিশ্চিত করতে সহায়ক। Symfony একটি বিল্ট-ইন লগিং সিস্টেম সরবরাহ করে যা Monolog লাইব্রেরি ব্যবহার করে। Monolog একটি শক্তিশালী এবং নমনীয় লগিং লাইব্রেরি, যা Symfony-তে লগ মেসেজ তৈরি ও পরিচালনার জন্য ব্যবহৃত হয়।
Symfony-তে লগ মেসেজ লেখা
Symfony-তে লগ মেসেজ লেখার জন্য আপনাকে LoggerInterface ব্যবহার করতে হবে, যা Symfony-এর সার্ভিস কন্টেইনারের মাধ্যমে ইনজেক্ট করা হয়। এটি আপনার অ্যাপ্লিকেশনের বিভিন্ন অংশে লগ মেসেজ তৈরি ও পরিচালনা করতে সাহায্য করে।
LoggerInterface ইনজেক্ট করা
Symfony-তে লগ মেসেজ লিখতে, আপনি কন্ট্রোলার বা অন্য যেকোনো ক্লাসে LoggerInterface সার্ভিস ইনজেক্ট করতে পারেন। এর মাধ্যমে আপনি বিভিন্ন লগ লেভেল ব্যবহার করে লগ মেসেজ লিখতে পারবেন।
কন্ট্রোলারে লগ মেসেজ লেখা উদাহরণ:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Psr\Log\LoggerInterface;
class HomeController extends AbstractController
{
public function index(LoggerInterface $logger): Response
{
// লগ মেসেজ লেখা
$logger->info('This is an informational message');
$logger->warning('This is a warning message');
$logger->error('This is an error message');
return new Response('Logs have been written');
}
}
এখানে:
LoggerInterfaceSymfony এর লগিং সার্ভিস। এটিinfo(),warning(),error()ইত্যাদি মেথড সরবরাহ করে যা বিভিন্ন স্তরের লগ মেসেজ লিখতে ব্যবহৃত হয়।info(),warning(),error()মেথডগুলি ব্যবহার করে আপনি লগ মেসেজ বিভিন্ন স্তরে লিখতে পারবেন।
লগ স্তর (Log Levels)
Monolog সিস্টেম বিভিন্ন লগ স্তর সমর্থন করে, যা আপনাকে মেসেজের গুরুত্ব অনুযায়ী লগ মেসেজ তৈরি করতে সহায়ক:
debug: ডিবাগিং ইনফরমেশন (সর্বনিম্ন স্তর)info: সাধারণ ইনফরমেশন (নর্মাল লগ)notice: সাধারণ সতর্কতা (থোক লগ)warning: সতর্কতা, কিন্তু কার্যক্ষমতার ক্ষতি নেইerror: একটি ত্রুটি যা অ্যাপ্লিকেশনের কার্যকারিতায় বাধা সৃষ্টি করেcritical: গুরুতর ত্রুটি যা অ্যাপ্লিকেশনের কাজ বন্ধ করে দিতে পারেalert: অ্যাপ্লিকেশনের জরুরি অবস্থাemergency: সিস্টেমের গুরুতর সমস্যা (সর্বোচ্চ স্তর)
লগ স্তরের উদাহরণ:
$logger->debug('This is a debug message');
$logger->info('This is an info message');
$logger->notice('This is a notice message');
$logger->warning('This is a warning message');
$logger->error('This is an error message');
$logger->critical('This is a critical error');
$logger->alert('This is an alert');
$logger->emergency('This is an emergency');
Symfony লগ কনফিগারেশন (config/packages/monolog.yaml)
Symfony Monolog-এর লগিং কনফিগারেশন config/packages/monolog.yaml ফাইলে করা হয়। এই ফাইলে আপনি লগ ফাইলের স্তর, লগ ফাইলের অবস্থান এবং লগ চ্যানেল কনফিগার করতে পারেন।
Monolog কনফিগারেশন উদাহরণ:
monolog:
channels: ['app'] # Custom log channel
handlers:
main:
type: stream
path: '%kernel.logs_dir%/%kernel.environment%.log' # Log file path
level: debug # Minimum log level
console:
type: console
এখানে:
channels: লগ চ্যানেল তৈরি করা যায়, যেমনappচ্যানেল।handlers: লগ কিভাবে লেখা হবে তা নির্ধারণ করে।streamটাইপ ব্যবহার করে লগ মেসেজ একটি ফাইলে লেখা হয়।path: লগ ফাইলের অবস্থান এবং নাম নির্ধারণ করা হয়।level: লগ স্তর, যেখানেdebugসর্বনিম্ন স্তরের লগ হতে পারে।
লগ ফাইল স্ট্রাকচার:
Symfony লগ ফাইলগুলো সাধারণত var/log/ ডিরেক্টরিতে রাখা হয়, যেমন:
var/log/dev.logvar/log/prod.log
লগ চ্যানেল ব্যবহার
আপনি যদি আলাদা লগ চ্যানেল ব্যবহার করতে চান, যেমন আলাদা সার্ভিসের জন্য বা বিভিন্ন ধরনের মেসেজের জন্য, তখন কনফিগারেশনে channels ব্যবহার করতে পারেন।
কাস্টম লগ চ্যানেল উদাহরণ:
monolog:
channels: ['app', 'database'] # Multiple log channels
handlers:
app:
type: stream
path: '%kernel.logs_dir%/app.log'
level: info
database:
type: stream
path: '%kernel.logs_dir%/database.log'
level: error
এখানে:
appচ্যানেলটি সাধারণ লগের জন্য ব্যবহৃত হবে।databaseচ্যানেলটি শুধুমাত্র ডাটাবেস সংক্রান্ত ত্রুটিগুলোর জন্য ব্যবহার হবে।
কাস্টম চ্যানেলে লগ লিখা উদাহরণ:
$logger = $this->get('monolog.logger.database');
$logger->error('This is a database error');
এখানে, monolog.logger.database চ্যানেলে লগ মেসেজ লেখা হচ্ছে।
ফাইল এবং রোলব্যাক
Monolog ফাইল লগিং সাপোর্ট করে, যার মাধ্যমে আপনি আলাদা আলাদা লগ ফাইল তৈরি করে রাখতে পারেন এবং রোলব্যাক বা পুরানো লগগুলি মুছে ফেলতে পারেন। এর জন্য RotatingFileHandler ব্যবহার করা হয়।
ফাইল রোলব্যাক উদাহরণ:
monolog:
handlers:
rotating_file:
type: rotating_file
path: '%kernel.logs_dir%/app.log'
level: debug
max_files: 10 # Keep 10 latest logs, delete older ones
এখানে:
max_files: সর্বোচ্চ কতটি লগ ফাইল সংরক্ষণ করতে চান তা নির্ধারণ করে।
সারাংশ
Symfony-তে লগিং পরিচালনা করার জন্য Monolog ব্যবহৃত হয়। এটি LoggerInterface এবং বিভিন্ন log levels ব্যবহার করে সহজভাবে লগ মেসেজ তৈরি, সংগ্রহ, এবং পরীক্ষা করতে সহায়ক। Symfony আপনাকে লগ ফাইল কনফিগারেশন, লগ চ্যানেল এবং লগ মেসেজের স্তর নির্ধারণের জন্য বিস্তৃত বিকল্প সরবরাহ করে, যা অ্যাপ্লিকেশনের নিরাপত্তা এবং পারফরম্যান্স নিরীক্ষণ করতে সহায়ক।