لاگگیری با Monolog در PHP: راهنمای جامع
لاگگیری یکی از جنبههای حیاتی توسعه و نگهداری نرمافزار است. ثبت رویدادها، خطاها و اطلاعات مهم در طول اجرای برنامه به شما کمک میکند تا مشکلات را شناسایی، عملکرد را بهبود بخشید و رفتار برنامه را درک کنید. Monolog یک کتابخانه لاگگیری قدرتمند و انعطافپذیر برای PHP است که به شما امکان میدهد لاگها را به روشهای مختلف و در قالبهای متنوع ذخیره کنید.
چرا Monolog؟
Monolog نسبت به روشهای سنتی لاگگیری در PHP (مانند استفاده از error_log()) مزایای متعددی دارد:
- انعطافپذیری: Monolog از انواع مختلفی از هندلرها (Handlers) پشتیبانی میکند که به شما امکان میدهد لاگها را به فایلها، پایگاههای داده، سرویسهای ابری و غیره ارسال کنید.
- سطوح لاگ: Monolog از سطوح مختلف لاگ (Debug, Info, Notice, Warning, Error, Critical, Alert, Emergency) پشتیبانی میکند که به شما امکان میدهد اهمیت هر رویداد را مشخص کنید.
- قالببندی: Monolog به شما امکان میدهد قالب خروجی لاگها را سفارشی کنید تا اطلاعات مورد نیاز خود را به راحتی پیدا کنید.
- کارایی: Monolog به گونهای طراحی شده است که کارایی بالایی داشته باشد و تأثیر کمی بر عملکرد برنامه شما بگذارد.
- توسعهپذیری: Monolog به راحتی قابل توسعه است و میتوانید هندلرها و قالببندهای سفارشی خود را ایجاد کنید.
نصب Monolog
Monolog را میتوان به راحتی از طریق Composer نصب کرد. دستور زیر را در ترمینال خود اجرا کنید:
composer require monolog/monolog
شروع کار با Monolog
پس از نصب، میتوانید از Monolog در کد PHP خود استفاده کنید. در اینجا یک مثال ساده آورده شده است:
pushHandler($stream);
// ثبت پیامهای لاگ
$logger->debug('این یک پیام Debug است.');
$logger->info('این یک پیام Info است.');
$logger->warning('این یک پیام Warning است.');
$logger->error('این یک پیام Error است.');
$logger->critical('این یک پیام Critical است.');
?>
در این مثال، ما یک شیء Logger ایجاد کردهایم و یک StreamHandler به آن اضافه کردهایم. StreamHandler لاگها را در فایل application.log ذخیره میکند. سپس، ما پیامهای لاگ مختلفی را با سطوح مختلف ثبت کردهایم.
سطوح لاگ
Monolog از سطوح لاگ زیر پشتیبانی میکند:
- Debug: اطلاعات دقیق برای اهداف اشکالزدایی.
- Info: اطلاعات کلی در مورد عملکرد برنامه.
- Notice: رویدادهای مهم که نیازی به توجه فوری ندارند.
- Warning: رویدادهایی که ممکن است در آینده باعث مشکل شوند.
- Error: خطاهایی که باعث نمیشوند برنامه متوقف شود.
- Critical: خطاهایی که باعث میشوند بخشی از برنامه متوقف شود.
- Alert: خطاهایی که نیاز به توجه فوری دارند.
- Emergency: خطاهایی که باعث میشوند کل برنامه متوقف شود.
هنگام ثبت پیامهای لاگ، میتوانید سطح لاگ را مشخص کنید. به عنوان مثال:
$logger->warning('این یک پیام Warning است.');
همچنین میتوانید حداقل سطح لاگ را برای یک هندلر تنظیم کنید. به عنوان مثال، اگر میخواهید فقط پیامهای Error و Critical را در یک فایل ذخیره کنید، میتوانید از کد زیر استفاده کنید:
$stream = new StreamHandler('error.log', Logger::ERROR);
$logger->pushHandler($stream);
هندلرها (Handlers)
هندلرها مسئول نوشتن لاگها به مقصدهای مختلف هستند. Monolog از انواع مختلفی از هندلرها پشتیبانی میکند، از جمله:
- StreamHandler: نوشتن لاگها در یک فایل.
- SwiftMailerHandler: ارسال لاگها از طریق ایمیل.
- SyslogHandler: نوشتن لاگها در Syslog.
- DatabaseHandler: نوشتن لاگها در یک پایگاه داده.
- RedisHandler: نوشتن لاگها در Redis.
- SlackHandler: ارسال لاگها به Slack.
میتوانید هندلرهای سفارشی خود را نیز ایجاد کنید.
قالببندی (Formatters)
قالببندها مسئول قالببندی خروجی لاگها هستند. Monolog از انواع مختلفی از قالببندها پشتیبانی میکند، از جمله:
- LineFormatter: قالببندی لاگها به صورت یک خط متنی.
- JsonFormatter: قالببندی لاگها به صورت JSON.
- HtmlFormatter: قالببندی لاگها به صورت HTML.
میتوانید قالببندهای سفارشی خود را نیز ایجاد کنید.
استفاده از Monolog در فریمورکها
بسیاری از فریمورکهای PHP (مانند Laravel و Symfony) به طور پیشفرض از Monolog پشتیبانی میکنند. برای استفاده از Monolog در این فریمورکها، معمولاً نیازی به نصب و پیکربندی اضافی نیست. کافی است از کلاس Logger در کد خود استفاده کنید.
نکات مهم
- انتخاب سطح لاگ مناسب: سطوح لاگ را به درستی انتخاب کنید تا اطلاعات مورد نیاز خود را ثبت کنید و از ثبت اطلاعات غیرضروری جلوگیری کنید.
- استفاده از هندلر مناسب: هندلری را انتخاب کنید که با نیازهای شما مطابقت داشته باشد.
- قالببندی مناسب: قالب خروجی لاگها را به گونهای تنظیم کنید که اطلاعات مورد نیاز خود را به راحتی پیدا کنید.
- چرخش لاگها: برای جلوگیری از پر شدن فضای دیسک، لاگها را به طور منظم بچرخانید.
- امنیت: از ثبت اطلاعات حساس در لاگها خودداری کنید.
مثال پیشرفته: لاگگیری با زمینه (Context)
Monolog به شما امکان میدهد اطلاعات اضافی را به عنوان زمینه (Context) به پیامهای لاگ اضافه کنید. این اطلاعات میتواند برای اشکالزدایی و تحلیل لاگها بسیار مفید باشد.
pushHandler($stream);
$user_id = 123;
$username = 'john.doe';
$logger->info('کاربر با ID {user_id} و نام کاربری {username} وارد سیستم شد.', [
'user_id' => $user_id,
'username' => $username,
]);
?>
در این مثال، ما اطلاعات user_id و username را به عنوان زمینه به پیام لاگ اضافه کردهایم. این اطلاعات در فایل لاگ به صورت یک آرایه JSON ذخیره میشوند.
نتیجهگیری
Monolog یک کتابخانه لاگگیری قدرتمند و انعطافپذیر برای PHP است که به شما امکان میدهد لاگها را به روشهای مختلف و در قالبهای متنوع ذخیره کنید. با استفاده از Monolog، میتوانید مشکلات را شناسایی، عملکرد را بهبود بخشید و رفتار برنامه خود را درک کنید. امیدوارم این راهنما به شما در شروع کار با Monolog کمک کند.
