Monolog হলো একটি শক্তিশালী PHP লগিং লাইব্রেরি, যা Symfony ফ্রেমওয়ার্কের মাধ্যমে লগিং করার জন্য ব্যবহৃত হয়। এটি Symfony অ্যাপ্লিকেশনের কার্যকারিতা মনিটর করতে এবং সমস্যা চিহ্নিত করতে সহায়ক। Monolog অ্যাপ্লিকেশন পর্যায়ে বিভিন্ন স্তরের লগ তৈরি করতে সক্ষম, যেমন: ডিবাগ, ইনফো, আলার্ম, এবং এরর। লগিং সাধারণত ডেভেলপমেন্ট এবং প্রোডাকশন পরিবেশে খুবই গুরুত্বপূর্ণ, কারণ এটি ডিবাগিং প্রক্রিয়া সহজ করে এবং অ্যাপ্লিকেশনের পারফরম্যান্স এবং নির্ভরযোগ্যতা নিশ্চিত করে।
Monolog কী?
Monolog একটি PHP লগিং লাইব্রেরি যা অ্যাপ্লিকেশনের চলমান অবস্থায় তথ্য সংরক্ষণ করে রাখে। এটি লগ ফাইল তৈরি করে, যা ডেভেলপারদের সমস্যা শনাক্ত করতে এবং প্রোগ্রাম স্ট্যাটাস মনিটর করতে সাহায্য করে। Monolog বিভিন্ন লগিং হ্যান্ডলার এবং ফরম্যাটার সমর্থন করে, যা আপনাকে লগ ফাইল সংরক্ষণ, বিশ্লেষণ, এবং পাঠানোর জন্য কাস্টমাইজড উপায় সরবরাহ করে।
Monolog একাধিক প্ল্যাটফর্মে লগিং সাপোর্ট করে, যেমন:
- ফাইল (file)
- ডেটাবেস (database)
- মেইল (email)
- কনসোল (console)
- আরও অনেক কিছু
Monolog ইনস্টলেশন
Symfony প্রজেক্টে Monolog ব্যবহার করার জন্য এটি প্রথমে ইনস্টল করতে হবে। Symfony এ Monolog সাধারণত ডিফল্ট প্যাকেজ হিসেবে অন্তর্ভুক্ত থাকে, তবে যদি এটি মিসিং থাকে, তাহলে Composer দিয়ে ইনস্টল করা যেতে পারে।
composer require symfony/monolog-bundle
এটি MonologBundle ইনস্টল করবে, যা Symfony-তে Monolog ব্যবহার করার জন্য প্রয়োজনীয় সকল কনফিগারেশন সরবরাহ করবে।
Monolog কনফিগারেশন
Monolog এর কনফিগারেশন সাধারণত config/packages/monolog.yaml ফাইলে করা হয়। এখানে আপনি লগিং লেভেল এবং লগ হ্যান্ডলার কনফিগার করতে পারবেন।
monolog.yaml উদাহরণ
monolog:
channels: ['app']
handlers:
# File Handler
main:
type: stream
path: '%kernel.logs_dir%/app.log'
level: debug
channels: ['app']
# Console Handler (for debugging)
console:
type: console
channels: ['app']
এখানে:
mainহ্যান্ডলারapp.logফাইল তৈরি করবে এবং এতে debug লেভেল পর্যন্ত লগ তথ্য সঞ্চয় করবে।consoleহ্যান্ডলারটি কনসোলে লগ তথ্য দেখাবে, যা ডেভেলপারদের ডিবাগ করতে সহায়ক।
Monolog লগিং স্তর (Log Levels)
Monolog বিভিন্ন স্তরের লগ সাপোর্ট করে, যার মাধ্যমে আপনি লগের গুরুত্ব অনুযায়ী তথ্য ফিল্টার করতে পারেন। নিম্নলিখিত স্তরগুলো Monolog-এ উপলব্ধ:
- DEBUG: সাধারণ ডিবাগ তথ্য, যা ডেভেলপমেন্ট এবং ট্রাবলশুটিংয়ের সময় ব্যবহার করা হয়।
- INFO: সাধারণ তথ্য যা অ্যাপ্লিকেশনের কাজের স্ট্যাটাস বা প্রক্রিয়া সম্পর্কে জানায়।
- NOTICE: কিছু গুরুত্বপূর্ণ, কিন্তু অ্যাপ্লিকেশন ভেঙে না পড়বে এমন তথ্য।
- WARNING: সতর্কতা, যা প্রোগ্রামের কার্যকারিতায় কিছু সমস্যা নির্দেশ করে।
- ERROR: বড় সমস্যা যা অ্যাপ্লিকেশনের কাজ ব্যাহত করতে পারে।
- CRITICAL: আরও গুরুতর সমস্যা, যা অ্যাপ্লিকেশনের কার্যকারিতা থামাতে পারে।
- ALERT: এক্সট্রিম সমস্যাগুলি যা অ্যাপ্লিকেশন বন্ধ করে দিতে পারে।
- EMERGENCY: সবচেয়ে গুরুতর সমস্যা, অ্যাপ্লিকেশন স্বাভাবিকভাবে কাজ করতে পারে না।
লগিং স্তর ব্যবহার
monolog:
handlers:
main:
type: stream
path: '%kernel.logs_dir%/app.log'
level: error # শুধুমাত্র 'error' এবং এর উপরের স্তরের লগ লেখা হবে
channels: ['app']
এখানে, level: error নির্দেশ করছে যে শুধুমাত্র ERROR, CRITICAL, ALERT, এবং EMERGENCY স্তরের লগই ফাইলে লেখা হবে।
Monolog হ্যান্ডলার (Handlers)
Monolog বিভিন্ন ধরনের হ্যান্ডলার সমর্থন করে, যা লগ তথ্য ভিন্ন ভিন্ন আউটপুট স্ট্রিমে প্রেরণ করতে ব্যবহৃত হয়, যেমন:
- StreamHandler: লগ ফাইল বা কনসোলে লগ পাঠানোর জন্য ব্যবহৃত হয়।
- RotatingFileHandler: নির্দিষ্ট আকারের পর লগ ফাইলটি রোটেট করে (নতুন ফাইল তৈরি করা)।
- MailHandler: লগ তথ্য ইমেইলে পাঠানোর জন্য ব্যবহৃত হয়।
- DatabaseHandler: লগ ডেটাবেসে সঞ্চয় করার জন্য ব্যবহৃত হয়।
StreamHandler উদাহরণ:
monolog:
handlers:
file:
type: stream
path: "%kernel.logs_dir%/app.log"
level: debug
RotatingFileHandler উদাহরণ:
monolog:
handlers:
rotating_file:
type: rotating_file
path: "%kernel.logs_dir%/app.log"
level: debug
max_files: 10 # সর্বোচ্চ ১০টি ফাইল সংরক্ষণ করবে
এখানে, rotating_file হ্যান্ডলার লগ ফাইলের আকার সীমাবদ্ধ রাখবে এবং পুরানো ফাইলগুলি সেভাবে রোটেট করবে।
Monolog ফরম্যাটার (Formatters)
Monolog ফরম্যাটার ব্যবহার করে লগ তথ্য কাস্টমাইজড ফরম্যাটে প্রদর্শন করতে পারে। এটি বিশেষ করে লগ ফাইলগুলি পরিষ্কার এবং পঠনযোগ্য করতে সহায়ক।
LineFormatter উদাহরণ:
monolog:
handlers:
main:
type: stream
path: '%kernel.logs_dir%/app.log'
level: debug
formatter: monolog.formatter.line
LineFormatter একটি সাধারণ ফরম্যাটার যা লগের সময়, স্তর, বার্তা ইত্যাদি কাস্টম ফরম্যাটে দেখায়।
Monolog ব্যবহার উদাহরণ
কন্ট্রোলার-এ Monolog ব্যবহার করে লগিং করা যায়। Symfony-এর কন্ট্রোলার বা সার্ভিসে Monolog ব্যবহার করতে নিম্নলিখিত পদ্ধতি ব্যবহার করা হয়:
namespace App\Controller;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends AbstractController
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function index(): Response
{
$this->logger->info('The homepage has been accessed.');
return new Response('Check your log file!');
}
}
এখানে, LoggerInterface-এর মাধ্যমে Monolog সেবা কন্ট্রোলারে ইনজেক্ট করা হয়েছে এবং info() মেথড ব্যবহার করে লগ ডাটা লিখা হয়েছে।
সারাংশ
Monolog একটি শক্তিশালী এবং নমনীয় PHP লগিং লাইব্রেরি যা Symfony অ্যাপ্লিকেশনে লগ তথ্য সংগ্রহ, বিশ্লেষণ এবং মনিটরিং করতে ব্যবহৃত হয়। এটি ফাইল, ডাটাবেস, মেইল বা কনসোলে লগ পাঠানোর জন্য বিভিন্ন হ্যান্ডলার এবং কাস্টম ফরম্যাটিং সাপোর্ট করে। Symfony-এর মাধ্যমে Monolog ব্যবহার করে আপনি বিভিন্ন স্তরের লগ তৈরি এবং পরিচালনা করতে পারেন, যা অ্যাপ্লিকেশন ডেভেলপমেন্ট এবং প্রোডাকশন পরিবেশে সমস্যা চিহ্নিত করতে অত্যন্ত কার্যকর।
Monolog হলো একটি শক্তিশালী এবং জনপ্রিয় লগিং লাইব্রেরি, যা Symfony অ্যাপ্লিকেশনে লগ তথ্য সংগ্রহ, মনিটরিং এবং বিশ্লেষণের জন্য ব্যবহৃত হয়। Symfony-তে Monolog কনফিগারেশন করা খুবই সহজ এবং নমনীয়, কারণ Symfony স্বয়ংক্রিয়ভাবে MonologBundle অন্তর্ভুক্ত করে, যা আপনাকে সহজে লগ ফাইল তৈরি, লগ স্তর নির্ধারণ, এবং বিভিন্ন আউটপুট স্ট্রিমে লগ পাঠাতে সহায়তা করে।
এখানে আমরা Symfony-তে Monolog কনফিগারেশন করার বিভিন্ন উপায় এবং উদাহরণগুলি দেখব।
MonologBundle ইনস্টলেশন
Symfony 4 এবং তার পরবর্তী সংস্করণে MonologBundle ইতিমধ্যে ডিফল্ট প্যাকেজ হিসেবে অন্তর্ভুক্ত থাকে। যদি আপনার প্রজেক্টে এটি না থাকে, তবে আপনি Composer ব্যবহার করে এটি ইনস্টল করতে পারেন:
composer require symfony/monolog-bundle
এটি MonologBundle ইনস্টল করবে, এবং আপনার Symfony প্রজেক্টের জন্য লগিং সক্ষম করবে।
Monolog কনফিগারেশন ফাইল (monolog.yaml)
Symfony-তে Monolog কনফিগারেশনের জন্য ডিফল্টভাবে config/packages/monolog.yaml ফাইলটি ব্যবহার করা হয়। এই ফাইলে আপনি লগিং লেভেল, হ্যান্ডলার, এবং অন্যান্য সেটিংস কনফিগার করতে পারবেন।
monolog.yaml কনফিগারেশন উদাহরণ
monolog:
# কাস্টম লগ চ্যানেল সংজ্ঞায়িত
channels: ['app']
# হ্যান্ডলারস
handlers:
# মূল লগ হ্যান্ডলার (ফাইল লগ)
main:
type: stream
path: '%kernel.logs_dir%/app.log' # লগ ফাইলের পাথ
level: debug # 'debug', 'info', 'notice', 'warning', 'error', 'critical' ইত্যাদি স্তরের লগ
channels: ['app'] # এই চ্যানেলের জন্য লগ
# কনসোল হ্যান্ডলার (ডেভেলপমেন্ট এবং ডিবাগের জন্য)
console:
type: console
channels: ['app']
# রোটেটিং ফাইল হ্যান্ডলার
rotating_file:
type: rotating_file
path: '%kernel.logs_dir%/rotated_app.log'
level: debug
max_files: 10 # সর্বোচ্চ ১০টি ফাইল সংরক্ষণ করবে
এখানে:
mainহ্যান্ডলারটি app.log ফাইল তৈরি করবে এবং সমস্তdebugলেভেলের লগ এই ফাইলে জমা করবে।consoleহ্যান্ডলারটি কনসোলের মাধ্যমে লগ দেখাবে।rotating_fileহ্যান্ডলারটি ফাইলের আকার সীমাবদ্ধ রাখবে এবং পুরানো ফাইলগুলো রোটেট করবে।
Monolog লগ স্তর (Log Levels)
Monolog-এ বিভিন্ন লগ স্তর (log level) রয়েছে, যা আপনি কনফিগারেশনে নির্ধারণ করতে পারেন। লগ স্তরের কিছু সাধারণ উদাহরণ:
- DEBUG: ডিবাগ তথ্য, উন্নয়ন পর্যায়ে ব্যবহৃত হয়।
- INFO: সাধারণ কার্যক্রম বা স্ট্যাটাস তথ্য।
- WARNING: সতর্কতা, যা কিন্তু অ্যাপ্লিকেশন ব্যাহত করতে পারে না।
- ERROR: অ্যাপ্লিকেশনের কার্যকারিতায় সমস্যা।
- CRITICAL: বড় সমস্যা, যা অ্যাপ্লিকেশনের কার্যকারিতা থামাতে পারে।
- ALERT: গুরুতর সমস্যা যা অ্যাপ্লিকেশন বন্ধ করে দিতে পারে।
- EMERGENCY: অ্যাপ্লিকেশন সম্পূর্ণভাবে ভেঙে যাওয়ার অবস্থায় লগ।
আপনি যে লগ স্তর নির্ধারণ করবেন, Monolog সেটি অনুযায়ী শুধুমাত্র সেই স্তরের বা তার উপরের স্তরের লগগুলো রেকর্ড করবে।
লগ স্তরের উদাহরণ
monolog:
handlers:
main:
type: stream
path: '%kernel.logs_dir%/app.log'
level: error # 'error' স্তরের লগ এবং তার উপরের স্তরের (critical, alert, emergency) লগ রেকর্ড হবে
এখানে, level: error কনফিগারেশনটি নির্দেশ করছে যে শুধুমাত্র ERROR, CRITICAL, ALERT, এবং EMERGENCY স্তরের লগই রেকর্ড হবে।
Monolog হ্যান্ডলার (Handlers)
Monolog কনফিগারেশনে বিভিন্ন ধরনের হ্যান্ডলার কনফিগার করা যায়, যার মাধ্যমে আপনি লগ আউটপুট বিভিন্ন জায়গায় পাঠাতে পারেন, যেমন ফাইল, মেইল, ডাটাবেস, কনসোল ইত্যাদি।
File Handler (StreamHandler)
এটি সাধারণত লগ তথ্য একটি ফাইলে সংরক্ষণ করতে ব্যবহৃত হয়। এর জন্য stream টাইপ ব্যবহার করা হয়।
monolog:
handlers:
main:
type: stream
path: '%kernel.logs_dir%/app.log' # লগ ফাইলের পাথ
level: debug # 'debug', 'info', 'warning', 'error' ইত্যাদি স্তরের লগ
RotatingFileHandler
এটি লগ ফাইলের আকার সীমাবদ্ধ রাখে এবং পুরানো ফাইলগুলোকে রোটেট করে (নতুন ফাইল তৈরি)। একটি সীমিত সংখ্যক পুরানো লগ ফাইল সংরক্ষণ করা হয়।
monolog:
handlers:
rotating_file:
type: rotating_file
path: '%kernel.logs_dir%/rotated_app.log'
level: info
max_files: 10 # সর্বোচ্চ ১০টি ফাইল সংরক্ষণ
Mail Handler
এটি লগ তথ্য ইমেইলে পাঠানোর জন্য ব্যবহৃত হয়।
monolog:
handlers:
mail:
type: mail
to: 'admin@example.com'
level: critical # 'critical' এবং তার উপরের স্তরের লগ ইমেইলে পাঠানো হবে
Database Handler
এই হ্যান্ডলারটি ডাটাবেসে লগ সংরক্ষণ করতে ব্যবহৃত হয়। এটি একটি ডাটাবেস টেবিলের মাধ্যমে লগ সংরক্ষণ করতে পারে, তবে সাধারণত এটি বেশি কাস্টম কনফিগারেশন চায়।
Monolog ফরম্যাটার (Formatters)
Monolog আপনাকে লগ আউটপুট কাস্টমাইজড ফরম্যাটে প্রদর্শন করার জন্য ফরম্যাটার ব্যবহার করতে দেয়। ফরম্যাটার ব্যবহার করে আপনি লগের আউটপুটকে আরও পাঠযোগ্য এবং সহজে বিশ্লেষণযোগ্য করে তুলতে পারেন।
LineFormatter উদাহরণ
monolog:
handlers:
main:
type: stream
path: '%kernel.logs_dir%/app.log'
level: debug
formatter: monolog.formatter.line
LineFormatter একটি সাধারণ ফরম্যাটার যা লগের সময়, স্তর, বার্তা ইত্যাদি কাস্টম ফরম্যাটে দেখায়।
Custom Formatter উদাহরণ
আপনি কাস্টম formatter তৈরি করতে পারেন, যেমন JSON ফরম্যাটে লগ আউটপুট:
monolog:
handlers:
main:
type: stream
path: '%kernel.logs_dir%/app.log'
level: debug
formatter: monolog.formatter.json
এখানে, লগ JSON ফরম্যাটে আউটপুট হবে, যা পরে বিশ্লেষণ বা প্রসেসিং করতে সহায়ক হতে পারে।
সারাংশ
Symfony তে Monolog কনফিগারেশন খুবই নমনীয় এবং শক্তিশালী, যা ডেভেলপারদের লগ তথ্য বিভিন্ন আউটপুট স্ট্রিমে পাঠাতে এবং কাস্টম ফরম্যাটে প্রদর্শন করতে সহায়ক। আপনি Monolog ব্যবহার করে সহজেই লগ স্তর, হ্যান্ডলার, ফরম্যাটার কনফিগার করতে পারেন, যা অ্যাপ্লিকেশনের কার্যকারিতা মনিটর করতে এবং ত্রুটি চিহ্নিত করতে অত্যন্ত গুরুত্বপূর্ণ। Monolog-কে Symfony অ্যাপ্লিকেশনগুলিতে লগিং সিস্টেম হিসেবে ব্যবহার করা একটি শ্রেষ্ঠ পদ্ধতি, যা ডেভেলপারদের কোড ডিবাগ এবং পারফরম্যান্স মনিটরিংয়ে সহায়ক।
Symfony ফ্রেমওয়ার্কে লগিং একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনের কার্যকারিতা পর্যবেক্ষণ করতে এবং ডিবাগিংয়ের জন্য সহায়ক। Symfony লগিংয়ের জন্য Monolog ব্যবহার করে, যা একটি শক্তিশালী এবং নমনীয় PHP লাইব্রেরি। লগিং লেভেল এবং হ্যান্ডলারস ব্যবহারের মাধ্যমে আপনি লগ ফাইলের আউটপুট কাস্টমাইজ করতে এবং সঠিক সময়ে সঠিক লগ বার্তা রেকর্ড করতে পারবেন।
এতে অ্যাপ্লিকেশন এর অভ্যন্তরীণ অবস্থার পর্যবেক্ষণ সহজ হয়, এবং তা নির্দিষ্ট পরিস্থিতি অনুযায়ী উপযুক্ত আউটপুট (ফাইল, ডাটাবেস, ইমেইল, ইত্যাদি) প্রদান করতে সক্ষম হয়।
Monolog লগিং সিস্টেম
Symfony-তে Monolog একটি বহুল ব্যবহৃত লাইব্রেরি, যা বিভিন্ন উৎস থেকে লগ তৈরি এবং ম্যানেজমেন্ট করে। Monolog স্বয়ংক্রিয়ভাবে Symfony-তে অন্তর্ভুক্ত থাকে এবং এটি বিভিন্ন ধরনের লগিং লেভেল এবং হ্যান্ডলার প্রদান করে।
লগিং লেভেলস (Logging Levels)
Monolog এর বিভিন্ন লগিং লেভেল থাকে, যা লগ বার্তার গুরুত্বের উপর ভিত্তি করে শ্রেণীবদ্ধ করা হয়। এই লেভেলগুলো নির্ধারণ করে কোন লগ বার্তা কতটা গুরুতর এবং সেগুলি কোথায় রেকর্ড হবে।
লগিং লেভেলস:
- DEBUG
- সবচেয়ে কম গুরুত্বের লগ। সাধারণত ডিবাগgingয়ের জন্য ব্যবহৃত হয়।
- উদাহরণ:
logger->debug('Debugging message')
- INFO
- তথ্যগত লগ যা সাধারণ অপারেশন বা কার্যকলাপের তথ্য প্রদান করে।
- উদাহরণ:
logger->info('User logged in')
- NOTICE
- স্বাভাবিক পরিস্থিতি, তবে ব্যবহারকারী বা অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ কিছু ঘটনা।
- উদাহরণ:
logger->notice('Configuration changed')
- WARNING
- কোনো সমস্যা বা সাবধানতা বার্তা। এটি একটি সম্ভাব্য সমস্যা প্রদর্শন করতে পারে, তবে এটি অ্যাপ্লিকেশনকে থামায় না।
- উদাহরণ:
logger->warning('User login failed')
- ERROR
- একটি ত্রুটি যা অ্যাপ্লিকেশনের একটি অংশকে প্রভাবিত করে, কিন্তু পুরো সিস্টেম বন্ধ হয় না।
- উদাহরণ:
logger->error('Database connection failed')
- CRITICAL
- গুরুতর ত্রুটি, যা অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশে সমস্যা তৈরি করতে পারে।
- উদাহরণ:
logger->critical('Database unavailable')
- ALERT
- খুব গুরুতর ত্রুটি, যা দ্রুত সমাধান প্রয়োজন।
- উদাহরণ:
logger->alert('Disk space is full')
- EMERGENCY
- সবচেয়ে গুরুতর ত্রুটি, যা সিস্টেমের পুরোপুরি অপ্রত্যাশিত বা বিপর্যস্ত অবস্থা নির্দেশ করে।
- উদাহরণ:
logger->emergency('Server is down')
Monolog হ্যান্ডলারস (Handlers)
Monolog হ্যান্ডলারস ব্যবহার করে আপনি লগগুলি কোথায় রেকর্ড করবেন তা নির্ধারণ করতে পারেন। হ্যান্ডলার হল সেই উপাদান, যা লগ বার্তাগুলোকে প্রক্রিয়া করে এবং সেগুলিকে নির্দিষ্ট আউটপুট (ফাইল, ডাটাবেস, ইমেইল, ইত্যাদি) এ পাঠায়।
প্রধান হ্যান্ডলারস:
StreamHandler
- লগ বার্তাগুলি একটি ফাইলে রেকর্ড করতে ব্যবহৃত হয়। এটি সবচেয়ে সাধারণ হ্যান্ডলার, যেখানে আপনি লগ ফাইলের অবস্থান এবং নাম নির্ধারণ করতে পারেন।
উদাহরণ:
monolog: handlers: main: type: stream path: '%kernel.logs_dir%/app.log' level: debugএখানে:
path: লগ ফাইলের অবস্থান নির্ধারণ করে।level: কোন লেভেলের লগ রেকর্ড করা হবে তা নির্ধারণ করে।
- FirePHPHandler
- এটি FirePHP ব্রাউজার এক্সটেনশনের মাধ্যমে লগ বার্তা পাঠায়, যা ডেভেলপারদের জন্য ব্রাউজারে সরাসরি লগ দেখতে সহায়ক।
RotatingFileHandler
- এটি একটি লগ ফাইল তৈরি করে এবং সেই ফাইলটি একটি নির্দিষ্ট আকারে পৌঁছালে পুরানো লগ ফাইলগুলিকে সংরক্ষণ এবং নতুন ফাইল তৈরি করে।
উদাহরণ:
monolog: handlers: rotating_file: type: rotating_file path: '%kernel.logs_dir%/rotating_app.log' level: info max_files: 5এখানে:
max_files: কতগুলি পুরানো লগ ফাইল সংরক্ষণ করা হবে তা নির্ধারণ করে।
- SlackHandler
- এটি লগ বার্তাগুলি Slack চ্যানেলে পাঠানোর জন্য ব্যবহৃত হয়।
SwiftMailerHandler
- এটি একটি ইমেইল পাঠানোর জন্য ব্যবহৃত হয়, যখন একটি নির্দিষ্ট লেভেল (যেমন, ERROR বা CRITICAL) লগ হয়।
উদাহরণ:
monolog: handlers: email: type: swift_mailer to: 'admin@example.com' from: 'no-reply@example.com' subject: 'Critical error' level: critical
Symfony-তে Monolog কনফিগারেশন
Symfony-তে Monolog কনফিগার করতে config/packages/monolog.yaml ফাইল ব্যবহার করা হয়। এখানে আপনি বিভিন্ন হ্যান্ডলার, লেভেল এবং চ্যানেল কনফিগার করতে পারেন।
monolog.yaml উদাহরণ:
monolog:
channels: ['app']
handlers:
# Main log file handler
main:
type: stream
path: '%kernel.logs_dir%/app.log'
level: debug
channels: ['app']
# Error log file handler
error:
type: stream
path: '%kernel.logs_dir%/error.log'
level: error
channels: ['app']
# Rotate log files
rotating_file:
type: rotating_file
path: '%kernel.logs_dir%/rotating_app.log'
level: info
max_files: 7
এখানে:
channels: এটি বিশেষ চ্যানেলের জন্য লগ বার্তা পরিচালনা করতে ব্যবহৃত হয়।handlers: এটি লগ বার্তাগুলির জন্য বিভিন্ন হ্যান্ডলার এবং তাদের কনফিগারেশন নির্ধারণ করে।
লগিং লেভেল এবং হ্যান্ডলারস এর সুবিধা
- লগ ফাইলের সাইজ নিয়ন্ত্রণ:
RotatingFileHandler ব্যবহার করে আপনি ফাইলের আকার সীমিত করতে পারেন এবং পুরানো লগ ফাইলগুলি সংরক্ষণ করতে পারেন। - বিভিন্ন আউটপুট:
Monolog বিভিন্ন আউটপুট (ফাইল, Slack, ইমেইল, ইত্যাদি) সাপোর্ট করে, যা বিভিন্ন পরিস্থিতিতে দরকারি হতে পারে। - গ্রানুলার লগিং লেভেলস:
লগিং লেভেলস (DEBUG, ERROR, WARNING, ইত্যাদি) ব্যবহার করে আপনি কেবলমাত্র গুরুত্বপূর্ণ লগ বার্তা সংগ্রহ করতে পারেন, যা ডিবাগিং বা মনিটরিং এ সহায়ক। - সহজ কনফিগারেশন:
Symfony-তে Monolog কনফিগারেশন খুবই সহজ এবং YAML ফাইলে সহজেই কাস্টমাইজ করা যায়।
সারাংশ
Symfony-তে Monolog লগিং ব্যবস্থাপনা খুবই শক্তিশালী এবং নমনীয়, যা বিভিন্ন লগিং লেভেল, হ্যান্ডলার এবং আউটপুট মাধ্যম সাপোর্ট করে। লগিং লেভেল এবং হ্যান্ডলারস ব্যবহার করে আপনি লগ বার্তাগুলিকে সঠিকভাবে রেকর্ড করতে এবং মনিটর করতে পারবেন, যা অ্যাপ্লিকেশনের কার্যকারিতা ট্র্যাকিং এবং ত্রুটি সমাধানকে সহজ করে তোলে।
লগিং একটি গুরুত্বপূর্ণ কার্যকারিতা যা অ্যাপ্লিকেশনের কার্যকারিতা পর্যবেক্ষণ, সমস্যা ডিবাগিং এবং সিস্টেমের কার্যকরী অবস্থা নিশ্চিত করতে সহায়ক। 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 আপনাকে লগ ফাইল কনফিগারেশন, লগ চ্যানেল এবং লগ মেসেজের স্তর নির্ধারণের জন্য বিস্তৃত বিকল্প সরবরাহ করে, যা অ্যাপ্লিকেশনের নিরাপত্তা এবং পারফরম্যান্স নিরীক্ষণ করতে সহায়ক।
Symfony একটি শক্তিশালী লগিং সিস্টেম সরবরাহ করে, যা Monolog লাইব্রেরির উপর ভিত্তি করে কাজ করে। Monolog Symfony-তে লগিং পরিচালনার জন্য ব্যবহৃত হয় এবং এটি বিভিন্ন আউটপুট ফরম্যাটে লগ তৈরি করতে সক্ষম। আপনি সহজেই লগিং ফরম্যাট কাস্টমাইজ করতে পারেন যাতে আপনার অ্যাপ্লিকেশনটির লগগুলো আরও স্পষ্ট এবং পাঠযোগ্য হয়।
Symfony-তে লগিং ফরম্যাট কাস্টমাইজ করার জন্য আপনি Monolog Configuration-এর মাধ্যমে বিভিন্ন ধরনের ফরম্যাট নির্ধারণ করতে পারবেন।
Monolog Configuration
Symfony-তে Monolog কনফিগারেশন সাধারণত config/packages/monolog.yaml ফাইলে রাখা হয়। আপনি এই ফাইলে লগ ফরম্যাট কাস্টমাইজ করতে পারবেন।
Monolog কনফিগারেশন ফাইল উদাহরণ
monolog:
handlers:
main:
type: stream
level: debug
channels: ['!event']
path: '%kernel.logs_dir%/%kernel.environment%.log'
formatter: monolog.formatter.line
console:
type: console
level: info
channels: ['!event']
custom:
type: stream
path: '%kernel.logs_dir%/custom.log'
level: warning
formatter: custom_formatter
formatters:
monolog.formatter.line:
format: "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"
custom_formatter:
format: "[%datetime%] - %level_name% - %message% | %context% | %extra%\n"
ব্যাখ্যা:
- handlers: এখানে লগিং-এর জন্য বিভিন্ন handlers সংজ্ঞায়িত করা হয়েছে।
mainhandler স্ট্যান্ডার্ড লগ ফাইলের জন্য ব্যবহৃত হচ্ছে, যা%kernel.logs_dir%/%kernel.environment%.logঅবস্থানে লগ তৈরি করবে।consolehandler কনসোল আউটপুটে লগ করবে, যা info লেভেল পর্যন্ত থাকবে।customhandler কাস্টম লগ ফাইল তৈরি করবে, যেখানে warning লেভেল এবং তার উপরের লগগুলো থাকবে।
- formatters: এই অংশে লগের ফরম্যাট কাস্টমাইজ করা হয়েছে।
monolog.formatter.lineফরম্যাটে লগের লাইন কনফিগার করা হয়েছে, যা[datetime] level_name: message context extraফরম্যাটে লগ তৈরি করবে।custom_formatterকাস্টম ফরম্যাটে লগ তৈরি করবে, যেখানে[datetime] - level_name - message | context | extraফরম্যাটে লগ তৈরি হবে।
লগ ফরম্যাট কাস্টমাইজেশন
বেসিক লগ ফরম্যাট:
monolog:
formatters:
monolog.formatter.line:
format: "[%datetime%] %level_name%: %message% %context% %extra%\n"
%datetime%: লগের সময়%level_name%: লগের লেভেল (যেমন: DEBUG, INFO, ERROR)%message%: লগের বার্তা%context%: অতিরিক্ত কনটেক্সট তথ্য (যেমন, ব্যবহারকারীর আইডি)%extra%: অতিরিক্ত লগ তথ্য (যেমন, ট্রেস বা স্ট্যাক)
লগ ফরম্যাটে বিভিন্ন উপাদান যোগ করা:
এখন, আপনি লগ ফরম্যাটে আরও উপাদান যোগ করতে পারেন, যেমন IP অ্যাড্রেস, ইউজারনেম, URL ইত্যাদি।
monolog:
formatters:
monolog.formatter.line:
format: "[%datetime%] %level_name%: %message% | IP: %extra.ip% | User: %extra.user% | URL: %extra.url%\n"
এখানে, extra অংশের মধ্যে ip, user, এবং url অ্যাড করা হয়েছে, যা আপনি লগ করার সময় প্রেরণ করতে পারবেন।
কাস্টম ফরম্যাটার তৈরি করা
আপনি যদি আরও জটিল লগ ফরম্যাট চান, তবে কাস্টম ফরম্যাটার তৈরি করতে পারেন।
namespace App\Logger;
use Monolog\Formatter\LineFormatter;
class CustomFormatter extends LineFormatter
{
public function format(array $record): string
{
// কাস্টম লগ ফরম্যাট তৈরি
return "[Custom - %datetime%] %level_name%: %message% | %context% | %extra%\n";
}
}
এখন এই কাস্টম ফরম্যাটারটি monolog.yaml ফাইলে ব্যবহার করতে হবে:
monolog:
formatters:
custom_formatter:
class: App\Logger\CustomFormatter
arguments: ["[%datetime%] %level_name%: %message% | %context% | %extra%\n"]
এভাবে আপনি কাস্টম লগ ফরম্যাট তৈরি করে ব্যবহার করতে পারবেন।
লগ ফরম্যাট কাস্টমাইজেশনের অন্যান্য দিক
- লগ লেভেল:
Symfony এর লগিং সিস্টেম লেভেল ভিত্তিক। আপনি আপনার পছন্দমতো লগ লেভেল ব্যবহার করতে পারেন, যেমন: debug, info, notice, warning, error, critical, alert, emergency। - মাল্টিপল লগ ফাইল:
বিভিন্ন ধরনের লগের জন্য আলাদা আলাদা ফাইল রাখতে পারেন (যেমন, error.log, access.log)। - লাইফটাইম রোটেশন:
কিছু কনফিগারেশন দিয়ে আপনার লগ ফাইলগুলোর আকার বা সময়ের ভিত্তিতে নতুন ফাইল তৈরি করতে পারেন।
লগ রোটেশন কাস্টমাইজ করা
আপনি Symfony-তে লগ রোটেশন কনফিগার করতে পারেন, যাতে পুরনো লগ ফাইলগুলি স্বয়ংক্রিয়ভাবে আর্কাইভ হয়ে যায় এবং নতুন লগ ফাইল তৈরি হয়।
monolog:
handlers:
main:
type: rotating_file
level: debug
path: '%kernel.logs_dir%/app.log'
max_files: 7 # সর্বোচ্চ ৭টি লগ ফাইল রাখা হবে
এখানে, max_files নির্ধারণ করে কতটি লগ ফাইল রাখা যাবে এবং পুরনো ফাইলগুলো মুছে ফেলা হবে।
সারাংশ
Symfony-তে লগিং ফরম্যাট কাস্টমাইজ করা অত্যন্ত সহজ এবং লজিকাল। আপনি Monolog কনফিগারেশন ফাইলের মাধ্যমে লগ ফরম্যাট কাস্টমাইজ করতে পারেন এবং বিভিন্ন প্রয়োজনে কাস্টম ফরম্যাটার তৈরি করে ব্যবহার করতে পারেন। এছাড়াও, লগ রোটেশন, মাল্টিপল লগ ফাইল এবং লগ লেভেল নির্ধারণের মাধ্যমে আপনার অ্যাপ্লিকেশনটির লগ ব্যবস্থাপনাকে আরও কার্যকর ও সুসংগঠিত করতে পারেন।
Read more