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