کتابخانه  پی اچ پی Monolog
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 4 دقیقه

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

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

در 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 

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@roocketir

باور ما اینست که کاربران ایرانی لایق بهترین‌ها هستند، از این رو ما تمام تلاش خود را می‌کنیم تا بتوانیم فیلم‌ها و مقالات آموزشی بروز و کاربردی را در اختیارتان قرار دهیم تا با استفاده از آنها بتوانید جزء بهترین‌ها در صنعت طراحی و برنامه‌نویسی وب شوید. ما ادعا نمی‌کنیم که بهترین هستیم ولی همیشه تمام تلاش خود را می‌کنیم بهترین عملکرد را به شما ارائه دهیم.

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید