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 অ্যাপ্লিকেশনগুলিতে লগিং সিস্টেম হিসেবে ব্যবহার করা একটি শ্রেষ্ঠ পদ্ধতি, যা ডেভেলপারদের কোড ডিবাগ এবং পারফরম্যান্স মনিটরিংয়ে সহায়ক।