Skill

Monolog এবং লগিং

সিম্ফনি (Symfony) - Web Development

257

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-এ উপলব্ধ:

  1. DEBUG: সাধারণ ডিবাগ তথ্য, যা ডেভেলপমেন্ট এবং ট্রাবলশুটিংয়ের সময় ব্যবহার করা হয়।
  2. INFO: সাধারণ তথ্য যা অ্যাপ্লিকেশনের কাজের স্ট্যাটাস বা প্রক্রিয়া সম্পর্কে জানায়।
  3. NOTICE: কিছু গুরুত্বপূর্ণ, কিন্তু অ্যাপ্লিকেশন ভেঙে না পড়বে এমন তথ্য।
  4. WARNING: সতর্কতা, যা প্রোগ্রামের কার্যকারিতায় কিছু সমস্যা নির্দেশ করে।
  5. ERROR: বড় সমস্যা যা অ্যাপ্লিকেশনের কাজ ব্যাহত করতে পারে।
  6. CRITICAL: আরও গুরুতর সমস্যা, যা অ্যাপ্লিকেশনের কার্যকারিতা থামাতে পারে।
  7. ALERT: এক্সট্রিম সমস্যাগুলি যা অ্যাপ্লিকেশন বন্ধ করে দিতে পারে।
  8. 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 ব্যবহার করে আপনি বিভিন্ন স্তরের লগ তৈরি এবং পরিচালনা করতে পারেন, যা অ্যাপ্লিকেশন ডেভেলপমেন্ট এবং প্রোডাকশন পরিবেশে সমস্যা চিহ্নিত করতে অত্যন্ত কার্যকর।

Content added By

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

Content added By

Symfony ফ্রেমওয়ার্কে লগিং একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনের কার্যকারিতা পর্যবেক্ষণ করতে এবং ডিবাগিংয়ের জন্য সহায়ক। Symfony লগিংয়ের জন্য Monolog ব্যবহার করে, যা একটি শক্তিশালী এবং নমনীয় PHP লাইব্রেরি। লগিং লেভেল এবং হ্যান্ডলারস ব্যবহারের মাধ্যমে আপনি লগ ফাইলের আউটপুট কাস্টমাইজ করতে এবং সঠিক সময়ে সঠিক লগ বার্তা রেকর্ড করতে পারবেন।

এতে অ্যাপ্লিকেশন এর অভ্যন্তরীণ অবস্থার পর্যবেক্ষণ সহজ হয়, এবং তা নির্দিষ্ট পরিস্থিতি অনুযায়ী উপযুক্ত আউটপুট (ফাইল, ডাটাবেস, ইমেইল, ইত্যাদি) প্রদান করতে সক্ষম হয়।


Monolog লগিং সিস্টেম

Symfony-তে Monolog একটি বহুল ব্যবহৃত লাইব্রেরি, যা বিভিন্ন উৎস থেকে লগ তৈরি এবং ম্যানেজমেন্ট করে। Monolog স্বয়ংক্রিয়ভাবে Symfony-তে অন্তর্ভুক্ত থাকে এবং এটি বিভিন্ন ধরনের লগিং লেভেল এবং হ্যান্ডলার প্রদান করে।


লগিং লেভেলস (Logging Levels)

Monolog এর বিভিন্ন লগিং লেভেল থাকে, যা লগ বার্তার গুরুত্বের উপর ভিত্তি করে শ্রেণীবদ্ধ করা হয়। এই লেভেলগুলো নির্ধারণ করে কোন লগ বার্তা কতটা গুরুতর এবং সেগুলি কোথায় রেকর্ড হবে।

লগিং লেভেলস:

  1. DEBUG
    • সবচেয়ে কম গুরুত্বের লগ। সাধারণত ডিবাগgingয়ের জন্য ব্যবহৃত হয়।
    • উদাহরণ: logger->debug('Debugging message')
  2. INFO
    • তথ্যগত লগ যা সাধারণ অপারেশন বা কার্যকলাপের তথ্য প্রদান করে।
    • উদাহরণ: logger->info('User logged in')
  3. NOTICE
    • স্বাভাবিক পরিস্থিতি, তবে ব্যবহারকারী বা অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ কিছু ঘটনা।
    • উদাহরণ: logger->notice('Configuration changed')
  4. WARNING
    • কোনো সমস্যা বা সাবধানতা বার্তা। এটি একটি সম্ভাব্য সমস্যা প্রদর্শন করতে পারে, তবে এটি অ্যাপ্লিকেশনকে থামায় না।
    • উদাহরণ: logger->warning('User login failed')
  5. ERROR
    • একটি ত্রুটি যা অ্যাপ্লিকেশনের একটি অংশকে প্রভাবিত করে, কিন্তু পুরো সিস্টেম বন্ধ হয় না।
    • উদাহরণ: logger->error('Database connection failed')
  6. CRITICAL
    • গুরুতর ত্রুটি, যা অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশে সমস্যা তৈরি করতে পারে।
    • উদাহরণ: logger->critical('Database unavailable')
  7. ALERT
    • খুব গুরুতর ত্রুটি, যা দ্রুত সমাধান প্রয়োজন।
    • উদাহরণ: logger->alert('Disk space is full')
  8. EMERGENCY
    • সবচেয়ে গুরুতর ত্রুটি, যা সিস্টেমের পুরোপুরি অপ্রত্যাশিত বা বিপর্যস্ত অবস্থা নির্দেশ করে।
    • উদাহরণ: logger->emergency('Server is down')

Monolog হ্যান্ডলারস (Handlers)

Monolog হ্যান্ডলারস ব্যবহার করে আপনি লগগুলি কোথায় রেকর্ড করবেন তা নির্ধারণ করতে পারেন। হ্যান্ডলার হল সেই উপাদান, যা লগ বার্তাগুলোকে প্রক্রিয়া করে এবং সেগুলিকে নির্দিষ্ট আউটপুট (ফাইল, ডাটাবেস, ইমেইল, ইত্যাদি) এ পাঠায়।

প্রধান হ্যান্ডলারস:

  1. StreamHandler

    • লগ বার্তাগুলি একটি ফাইলে রেকর্ড করতে ব্যবহৃত হয়। এটি সবচেয়ে সাধারণ হ্যান্ডলার, যেখানে আপনি লগ ফাইলের অবস্থান এবং নাম নির্ধারণ করতে পারেন।

    উদাহরণ:

    monolog:
        handlers:
            main:
                type: stream
                path: '%kernel.logs_dir%/app.log'
                level: debug
    

    এখানে:

    • path: লগ ফাইলের অবস্থান নির্ধারণ করে।
    • level: কোন লেভেলের লগ রেকর্ড করা হবে তা নির্ধারণ করে।
  2. FirePHPHandler
    • এটি FirePHP ব্রাউজার এক্সটেনশনের মাধ্যমে লগ বার্তা পাঠায়, যা ডেভেলপারদের জন্য ব্রাউজারে সরাসরি লগ দেখতে সহায়ক।
  3. RotatingFileHandler

    • এটি একটি লগ ফাইল তৈরি করে এবং সেই ফাইলটি একটি নির্দিষ্ট আকারে পৌঁছালে পুরানো লগ ফাইলগুলিকে সংরক্ষণ এবং নতুন ফাইল তৈরি করে।

    উদাহরণ:

    monolog:
        handlers:
            rotating_file:
                type: rotating_file
                path: '%kernel.logs_dir%/rotating_app.log'
                level: info
                max_files: 5
    

    এখানে:

    • max_files: কতগুলি পুরানো লগ ফাইল সংরক্ষণ করা হবে তা নির্ধারণ করে।
  4. SlackHandler
    • এটি লগ বার্তাগুলি Slack চ্যানেলে পাঠানোর জন্য ব্যবহৃত হয়।
  5. 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: এটি লগ বার্তাগুলির জন্য বিভিন্ন হ্যান্ডলার এবং তাদের কনফিগারেশন নির্ধারণ করে।

লগিং লেভেল এবং হ্যান্ডলারস এর সুবিধা

  1. লগ ফাইলের সাইজ নিয়ন্ত্রণ:
    RotatingFileHandler ব্যবহার করে আপনি ফাইলের আকার সীমিত করতে পারেন এবং পুরানো লগ ফাইলগুলি সংরক্ষণ করতে পারেন।
  2. বিভিন্ন আউটপুট:
    Monolog বিভিন্ন আউটপুট (ফাইল, Slack, ইমেইল, ইত্যাদি) সাপোর্ট করে, যা বিভিন্ন পরিস্থিতিতে দরকারি হতে পারে।
  3. গ্রানুলার লগিং লেভেলস:
    লগিং লেভেলস (DEBUG, ERROR, WARNING, ইত্যাদি) ব্যবহার করে আপনি কেবলমাত্র গুরুত্বপূর্ণ লগ বার্তা সংগ্রহ করতে পারেন, যা ডিবাগিং বা মনিটরিং এ সহায়ক।
  4. সহজ কনফিগারেশন:
    Symfony-তে Monolog কনফিগারেশন খুবই সহজ এবং YAML ফাইলে সহজেই কাস্টমাইজ করা যায়।

সারাংশ

Symfony-তে Monolog লগিং ব্যবস্থাপনা খুবই শক্তিশালী এবং নমনীয়, যা বিভিন্ন লগিং লেভেল, হ্যান্ডলার এবং আউটপুট মাধ্যম সাপোর্ট করে। লগিং লেভেল এবং হ্যান্ডলারস ব্যবহার করে আপনি লগ বার্তাগুলিকে সঠিকভাবে রেকর্ড করতে এবং মনিটর করতে পারবেন, যা অ্যাপ্লিকেশনের কার্যকারিতা ট্র্যাকিং এবং ত্রুটি সমাধানকে সহজ করে তোলে।

Content added By

লগিং একটি গুরুত্বপূর্ণ কার্যকারিতা যা অ্যাপ্লিকেশনের কার্যকারিতা পর্যবেক্ষণ, সমস্যা ডিবাগিং এবং সিস্টেমের কার্যকরী অবস্থা নিশ্চিত করতে সহায়ক। 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');
    }
}

এখানে:

  • LoggerInterface Symfony এর লগিং সার্ভিস। এটি 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.log
  • var/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 আপনাকে লগ ফাইল কনফিগারেশন, লগ চ্যানেল এবং লগ মেসেজের স্তর নির্ধারণের জন্য বিস্তৃত বিকল্প সরবরাহ করে, যা অ্যাপ্লিকেশনের নিরাপত্তা এবং পারফরম্যান্স নিরীক্ষণ করতে সহায়ক।

Content added By

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 সংজ্ঞায়িত করা হয়েছে।
    • main handler স্ট্যান্ডার্ড লগ ফাইলের জন্য ব্যবহৃত হচ্ছে, যা %kernel.logs_dir%/%kernel.environment%.log অবস্থানে লগ তৈরি করবে।
    • console handler কনসোল আউটপুটে লগ করবে, যা info লেভেল পর্যন্ত থাকবে।
    • custom handler কাস্টম লগ ফাইল তৈরি করবে, যেখানে 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"]

এভাবে আপনি কাস্টম লগ ফরম্যাট তৈরি করে ব্যবহার করতে পারবেন।


লগ ফরম্যাট কাস্টমাইজেশনের অন্যান্য দিক

  1. লগ লেভেল:
    Symfony এর লগিং সিস্টেম লেভেল ভিত্তিক। আপনি আপনার পছন্দমতো লগ লেভেল ব্যবহার করতে পারেন, যেমন: debug, info, notice, warning, error, critical, alert, emergency
  2. মাল্টিপল লগ ফাইল:
    বিভিন্ন ধরনের লগের জন্য আলাদা আলাদা ফাইল রাখতে পারেন (যেমন, error.log, access.log)।
  3. লাইফটাইম রোটেশন:
    কিছু কনফিগারেশন দিয়ে আপনার লগ ফাইলগুলোর আকার বা সময়ের ভিত্তিতে নতুন ফাইল তৈরি করতে পারেন।

লগ রোটেশন কাস্টমাইজ করা

আপনি Symfony-তে লগ রোটেশন কনফিগার করতে পারেন, যাতে পুরনো লগ ফাইলগুলি স্বয়ংক্রিয়ভাবে আর্কাইভ হয়ে যায় এবং নতুন লগ ফাইল তৈরি হয়।

monolog:
  handlers:
    main:
      type: rotating_file
      level: debug
      path: '%kernel.logs_dir%/app.log'
      max_files: 7  # সর্বোচ্চ ৭টি লগ ফাইল রাখা হবে

এখানে, max_files নির্ধারণ করে কতটি লগ ফাইল রাখা যাবে এবং পুরনো ফাইলগুলো মুছে ফেলা হবে।


সারাংশ

Symfony-তে লগিং ফরম্যাট কাস্টমাইজ করা অত্যন্ত সহজ এবং লজিকাল। আপনি Monolog কনফিগারেশন ফাইলের মাধ্যমে লগ ফরম্যাট কাস্টমাইজ করতে পারেন এবং বিভিন্ন প্রয়োজনে কাস্টম ফরম্যাটার তৈরি করে ব্যবহার করতে পারেন। এছাড়াও, লগ রোটেশন, মাল্টিপল লগ ফাইল এবং লগ লেভেল নির্ধারণের মাধ্যমে আপনার অ্যাপ্লিকেশনটির লগ ব্যবস্থাপনাকে আরও কার্যকর ও সুসংগঠিত করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...