عنوان مقاله :

کتابخانه پی اچ پی Monolog

گردآوری و تالیف : محمد صادق زحمتکش
تاریخ انتشار : 09 تیر 1396
دسته بندی ها : پی اچ پی

کتابخانه ها مجموعه ای از توابع و کد های آماده ای هستند که که به صورت ماژولار در پروژه ها استفاده میشوند و قسمتی از برنامه را می سازند یعنی به جای این که شما وقت بذارید از اول اون قسمت برنامه که وظیفه ای خاصی دارد را بنویسید با کتابخانه ی مربوط به آن برنامه را کامل کرده و در صورت نیاز فقط کتابخانه را ویرایش و شخصی سازی می کنید.

در php کتابخانه های بسیاری برای موارد مختلف وجود دارد که هر کدام مربوط به قسمتی از برنامه و پروژه شما می باشند.در این مقاله سعی داریم به معرفی اجمالی کتابخانه ی Monolog که از کتابخانه هایی در زمینه ی امنیت و ورود به پنل کاربری به صورت پیشرفته می باشد بپردازیم.

معرفی Monolog

Monolog یک سیستم پیشرفته‌ی لاگ و گزارشگیری است که معمولا در مواقع ورود اطلاعات و دریافت خطا از دیتابیس مورد استفاده قرار میگیرد. این کتابخانه از وب سرویس ها ، دیتابیس ها و فایل ها ی موجود در پروژه لاگ می‌گیرد. به این صورت که با الگوریتم های گوناگون رمزنگاری شده و امن و البته بهینه شده میتوانید به راحتی یک سیستم بهینه ، پیشرفته و امن لاگ و گزارشگیری ایجاد کرد که با ارتباط مستقیم با دیتابیس و ... عملیات لاگ (logs) را انجام می دهد.

در کتابخانه ی Monolog برای قسمت های مختلف ورود اطلاعات و انجام لاگ گیری الگوریتم های منحصر به فردی استفاده شده است که این عمل به امنیت و سرعت پروژه می افزاید.

در مجموع شما با استفاده از کتابخانه ی Monolog  میتوانید logs های مربوط به php را به loggly های پروژه تان ارسال و خروجی مطلوب و ایمنی را دریافت نمایید و به سرعت انجام پروژه خود بیفزایید و همچنین خطاها را برطرف سازید.

شما میتوانید کد کنترل خطای مربوط به loggly Monolog  را در زیر مشاهده نمایید:

declare(strict_types=1);	
	
	/*
	 * This file is part of the Monolog package.
	 *
	 * (c) Jordi Boggiano 
	 *
	 * For the full copyright and license information, please view the LICENSE
	 * file that was distributed with this source code.
	 */
	
	namespace Monolog\Handler;
	
	use Monolog\Logger;
	use Monolog\Formatter\FormatterInterface;
	use Monolog\Formatter\LogglyFormatter;
	
	/**
	 * Sends errors to Loggly.
	 *
	 * @author Przemek Sobstel 
	 * @author Adam Pancutt 
	 * @author Gregory Barchard 
	 */
	class LogglyHandler extends AbstractProcessingHandler
	{
	    const HOST = 'logs-01.loggly.com';
	    const ENDPOINT_SINGLE = 'inputs';
	    const ENDPOINT_BATCH = 'bulk';
	
	    protected $token;
	
	    protected $tag = [];
	
	    public function __construct($token, $level = Logger::DEBUG, $bubble = true)
	    {
	        if (!extension_loaded('curl')) {
	            throw new \LogicException('The curl extension is needed to use the LogglyHandler');
	        }
	
	        $this->token = $token;
	
	        parent::__construct($level, $bubble);
	    }
	
	    public function setTag($tag)
	    {
	        $tag = !empty($tag) ? $tag : [];
	        $this->tag = is_array($tag) ? $tag : [$tag];
	    }
	
	    public function addTag($tag)
	    {
	        if (!empty($tag)) {
	            $tag = is_array($tag) ? $tag : [$tag];
	            $this->tag = array_unique(array_merge($this->tag, $tag));
	        }
	    }
	
	    protected function write(array $record)
	    {
	        $this->send($record["formatted"], self::ENDPOINT_SINGLE);
	    }
	
	    public function handleBatch(array $records)
	    {
	        $level = $this->level;
	
	        $records = array_filter($records, function ($record) use ($level) {
	            return ($record['level'] >= $level);
	        });
	
	        if ($records) {
	            $this->send($this->getFormatter()->formatBatch($records), self::ENDPOINT_BATCH);
	        }
	    }
	
	    protected function send($data, $endpoint)
	    {
	        $url = sprintf("https://%s/%s/%s/", self::HOST, $endpoint, $this->token);
	
	        $headers = ['Content-Type: application/json'];
	
	        if (!empty($this->tag)) {
	            $headers[] = 'X-LOGGLY-TAG: '.implode(',', $this->tag);
	        }
	
	        $ch = curl_init();
	
	        curl_setopt($ch, CURLOPT_URL, $url);
	        curl_setopt($ch, CURLOPT_POST, true);
	        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
	        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	
	        Curl\Util::execute($ch);
	    }
	
	    protected function getDefaultFormatter(): FormatterInterface
	    {
	        return new LogglyFormatter();
	    }
	}

بعد از توضیحات و معرفی کتابخانه Monolog  ونیز ارائه ی کد خطای آن برای آشنایی بیشتر به نحوه ی setup این کتابخانه در پروژه های php میپردازیم ، باما همراه باشید:

مراحل setup کتابخانه ی Monolog :

1.  نصب کتابخانه ی Monolog

برای نصب آخرین نسخه از کتابخانه ی Monolog یا فایل های php آن را دانلود و با فراخوانی آن در پروژه ی خود از آن استفاده نمایید ویا این که با دستور زیر در فایل های پروژه ی خود آن را نصب نمایید:

sudo php composer.phar require monolog/monolog

2. نصب PHP Curl

اگر کتابخانه ی php curl نصب نیست آن را به وسیله ی کد زیر نصب نمایید:

sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

3. پیکربندی و تست
به وسیله ی کد زیر میتوانید پیکربندی را به فایل منبع اضافه نمایید و نیز برخی از موارد کتابخانه را تست بگیرید:


require_once __DIR__ . '/vendor/autoload.php';

use Monolog\Logger;

use Monolog\Handler\LogglyHandler;

use Monolog\Formatter\LogglyFormatter;



$log = new Logger('appName');

$log->pushHandler(new LogglyHandler('TOKEN/tag/monolog', Logger::INFO));



$log->addWarning('test logs to loggly');

4. بررسی رویدادها

tag:monolog

اضافه کردن کتابخانه در فریم ورک ها

مواردی که بالا ذکر شد برای استفاده از کتابخانه در php خام است ولی اگر شما از فریم ورک هایی مانند لاراول استفاده نمایید کار بسیار راحت تر میشد به صورتی که فایل های کلاس یا php کتابخانه را در پوشه ی APP قرار داده و با تابع های فراخوان کتابخانه را فراخوانی می کنید.برای این منظور به فرض این که شما فایل phpکتابخانه را در اختیار دارید به صورت زیر عمل میکنید:

Include(app_patche)\libraries\myfunctions.php

در اینجا ما فایل کتابخانه ی مورد نظر را myfunctions در نظر گرفتیم.

در کل برای اضافه کردن کتابخانه به فریم ورک لاراول سه راه معمول وجود دارد:

  • 1. استفده از دستور include() و requite()
  • 2. افزودن فایل در composer.json
  • 3. در خود autoload در composer.json 

تفاوت حالت 2 با 3 در این است که در حالت 2 فقط فایل مورد نظر اضافه خواهد شد ولی در حالت 3 کل library های موجود در فایل  libraries اضافه میشود.

در قطعه کد زیر برخی از کلاس های کتابخانه ی Monolog نشان داده شده است.

use Monolog\Logger;

use Monolog\Handler\StreamHandler;



// create a log channel

$log = new Logger('name');

$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));



// add records to the log

$log->warning('Foo');

$log->error('Bar');

برای دریافت کتاب خانه ی Monolog می توانید به آدرس زیر مراجعه فرمایید: https://github.com/Seldaek/monolog 

مقالات پیشنهادی

فریمورک پی اچ پی phalcon

با بروزرسانی و پیشرفت زبان برنامه نویسی php ، فریم ورک های زیادی منسوخ شدن همچنین خیلی از فریم ورک ها از پایه نوشته شدن تا از مزیت های جدید php عقب نم...

فریم ورک های پی اچ پی

در دنیای آیتی و آی سی تی با گذر زمان و رشد علم و علوم ارتباطات ،برنامه نویسان و توسعه دهندگان پروژه های گوناگون به مجموعه ای از کتابخانه های گوناگون ک...

کتابخانه پی اچ پی Opauth

کتابخانه ی Opauth دقیقا همین کار را انجام می دهد. شما با این کتابخانه قادر خواهید بود تا با فراخوانی کلاس ها و توابع آن سیستم احراز هویت کاربران را با...

کتابخانه ی Requests for php

یکی دیگر از کتابخانه های php ، Requests است که در این مقاله قصد داریم به معرفی اجمالی و قدرت و توانایی های این کتابخانه در پیشبرد پروژه های php بپرداز...

دیدگاه های ارزشمند شما

برای ارسال نظر لازم است ابتدا وارد سایت شوید
فرهنگ | 6 ماه پیش

سلام،
monolog يك سيستم ورود به پنل نيستش و براي لاگ گيري هستش

لطفا ترجمه را اصلاح بفرماييد با تشكر

محمدصادق زحمتکش | 6 ماه پیش

منظور لاگین نبوده است
این کتابخانه برای عملیات لاگ و گزارش گیری رو در حین ورود داده به دیتا بیس انجام میدهد
اصلاح شده ی این مقاله به زودی در سایت قرار میگیرد