PSR-3: Logger Interface

PSR-3 استاندارد برنامه نویسی

PSR-3 : رابط کاربری logger

این استاندارد یک رابط کاربری برای ورود به کتابخانه ها را مطرح می کند.

هدف اصلی این استاندارد این است که به کتابخانه ها اجازه دهد یک شیء Psr\Log\LoggerInterface را دریافت کنند و logها را به صورت ساده و جامع در آن ثبت کنند. فریم ورک ها و CMSهایی که با نیازهای کاربران سروکار دارند رابط کاربری را براساس اهداف خود گسترش می دهند اما باید با این استاندارد سازگار باقی بمانند.

۱- مشخصات
۱-۱ : پایه
واسط کاربری logger ، هشت روش برای نوشتن logها در هشت سطح RFC5424 مطرح می کند .(debug, info, notice, warning, error, critical, alert, emergency)
نهمین روش،log، یک log level را بعنوان اولین آرگومان می پذیرد.فراخوانی این روش با یکی از ثابت های log level باید نتایج مشابهی با فراخوانی روش level-specific داشته باشد.کاربران نباید از یک سطح سفارشی بدون اطمینان از اینکه اجرای فعلی آن را ساپورت می کند استفاده کنند.

۱-۲ : پیام
همه روش ها، بوسیله متد ()toString__ یک رشته را به عنوان ورودی می پذیرند. پیاده ساز ممکن است مدیریت و بررسی ویژه ای برای ارسال objectها داشته باشد.
پیام ممکن است شامل متغیرهایی باشد که پیاده ساز ممکن است آن ها را با مقادیری از آرایه context جایگزین کند.نام متغیرها باید با key یا همان کلیدها در آرایه context مطابق باشند.
نام متغیرها باید در بین پرانتز باز و پرانتز بسته تعریف شود.و هیچ فضای خالی نباید بین پرانتزهای محدود کننده و متغیر وجود داشته باشد.
نام متغیرها باید تنها از کاراکترهای a-z و A-Z و ۰-۹ و خط زیر (underscore) و نقطه (.) تشکیل شده باشد. استفاده از دیگر کاراکترها برای تغییرات آتی مشخصات متغیرها رزرو شده می باشد.
پیاده سازها ممکن است از متغیرها برای پیاده سازی استراتژی های متفاوت و ترجمه logها برای نمایش استفاده کنند.

مثال زیر نمونه ایی از پیاده سازی متغیرهای ارائه شده برای اهداف مرجع است:

<?php

/**

* Interpolates context values into the message placeholders.

*/

function interpolate($message, array $context = array())

{

// build a replacement array with braces around the context keys

$replace = array();

foreach ($context as $key => $val) {

// check that the value can be casted to string

if (!is_array($val) && (!is_object($val) || method_exists($val, ‘__toString’))) {

$replace[‘{‘ . $key . ‘}’] = $val;

}

}

// interpolate replacement values into the message and return

return strtr($message, $replace);

}

// a message with brace-delimited placeholder names

$message = “User {username} created”;

// a context array of placeholder names => replacement values

$context = array(‘username’ => ‘bolivar’);

// echoes “User bolivar created”

echo interpolate($message, $context);

۱-۳ : محتوا
هر روش یک آرایه را به عنوان داده های محتوایی می پذیرد. این به معنای نگه داشتن هر گونه اطلاعات غیرمرتبطی است که در یک رشته به خوبی مشخص نشده است.آرایه می تواند هر چیزی را شامل شود.پیاده سازها باید اطمینان حاصل کنند که با داده های محتوا با حداقل قابلیت اطمینان برخورد می کنند. یک مقدار داده شده به محتوا نباید هیچ استثنایی، هر گونه خطای php، هشدار یا اطلاع رسانی را نمایش دهد.
اگر شی Exception در داده های context منتقل شود، باید در کلید “exception” قرار داده شود.استثنا Logging یک الگوی معمول است و به پیاده سازها اجازه ی استخراج ردیابی پشته را از استثنا زمانی که پشتیبان log از آن حمایت می کند را می دهد.پیاده سازها باید بررسی کنند که کلید ‘exception’ واقعا یک استثنا است، قبل از اینکه از آن استفاده کنند چرا که ممکن است شامل هرچیزی باشد.

۱-۴ : کلاس های کمکی و روابط کاربری
کلاس Psr\Log\AbstractLogger اجازه می دهد که LoggerInterface را به سادگی بوسیله گسترش دادن آن و پیاده سازی روش عمومی log اجرا کنید.هشت روش دیگر پیام و متن را به آن ارسال می کنند.
به طور مشابه،برای استفاده از Psr\Log\LoggerTrait تنها نیاز است روش عمومی log پیاده سازی شود. توجه داشته باشید به دلیل این که ویژگی ها نمی توانند رابط های کاربری را اجرا کنند، باید LoggerInterface را اجرا کنید.
Psr \ Log \ NullLogger همراه با رابط کاربری ارائه شده است. اگر ایجاد داده های محتوایی گران باشد استفاده از loggingهای شرطی راه بهتری خواهد بود.
Psr \ Log \ LoggerAwareInterface فقط شامل یک روش (setLogger(LoggerInterface $logger است. و می تواند توسط فریم ورک ها برای نمونه های auto-wire دلخواه با logger مورد استفاده قرار گیرد.
ویژگیPsr \ Log \ LoggerAwareTrait می تواند برای اجرای واسط کاربری معادل به راحتی در هر کلاس استفاده شود. این به شما اجازه می دهد به
this-> logger$ دسترسی پیدا کنید.
کلاس “Psr \ Log \ LogLevel” ثابت ها را برای هشت سطح ورودی نگه می دارد.

Package
واسط های کاربری و کلاس ها به خوبی کلاس های استثنایی مرتبط توصیف شده اند و همچنین و یک مجموعه تست برای تأیید پیاده سازی شما به عنوان بخشی از بسته psr / log ارائه شده است.

Psr \ Log \ LoggerInterface

<?php

namespace Psr\Log;

/**

* Describes a logger instance

*

* The message MUST be a string or object implementing __toString().

*

* The message MAY contain placeholders in the form: {foo} where foo

* will be replaced by the context data in key “foo”.

*

* The context array can contain arbitrary data, the only assumption that

* can be made by implementors is that if an Exception instance is given

* to produce a stack trace, it MUST be in a key named “exception”.

*

* See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md

* for the full interface specification.

*/

interface LoggerInterface

{

/**

* System is unusable.

*

* @param string $message

* @param array $context

* @return null

*/

public function emergency($message, array $context = array());

/**

* Action must be taken immediately.

*

* Example: Entire website down, database unavailable, etc. This should

* trigger the SMS alerts and wake you up.

*

* @param string $message

* @param array $context

* @return null

*/

public function alert($message, array $context = array());

/**

* Critical conditions.

*

* Example: Application component unavailable, unexpected exception.

*

* @param string $message

* @param array $context

* @return null

*/

public function critical($message, array $context = array());

/**

* Runtime errors that do not require immediate action but should typically

* be logged and monitored.

*

* @param string $message

* @param array $context

* @return null

*/

public function error($message, array $context = array());

/**

* Exceptional occurrences that are not errors.

*

* Example: Use of deprecated APIs, poor use of an API, undesirable things

* that are not necessarily wrong.

*

* @param string $message

* @param array $context

* @return null

*/

public function warning($message, array $context = array());

/**

* Normal but significant events.

*

* @param string $message

* @param array $context

* @return null

*/

public function notice($message, array $context = array());

/**

* Interesting events.

*

* Example: User logs in, SQL logs.

*

* @param string $message

* @param array $context

* @return null

*/

public function info($message, array $context = array());

/**

* Detailed debug information.

*

* @param string $message

* @param array $context

* @return null

*/

public function debug($message, array $context = array());

/**

* Logs with an arbitrary level.

*

* @param mixed $level

* @param string $message

* @param array $context

* @return null

*/

public function log($level, $message, array $context = array());

}

Psr\Log\LoggerAwareInterface

<?php

namespace Psr\Log;

/**

* Describes a logger-aware instance

*/

interface LoggerAwareInterface

{

/**

* Sets a logger instance on the object

*

* @param LoggerInterface $logger

* @return null

*/

public function setLogger(LoggerInterface $logger);

}

Psr\Log\LogLevel

<?php

namespace Psr\Log;

/**

* Describes log levels

*/

class LogLevel

{

const EMERGENCY = ’emergency’;

const ALERT = ‘alert’;

const CRITICAL = ‘critical’;

const ERROR = ‘error’;

const WARNING = ‘warning’;

const NOTICE = ‘notice’;

const INFO = ‘info’;

const DEBUG = ‘debug’;

}

درباره مدیر محتوا

همچنین بررسی کنید

اشتراک گذاری لوکال هاست با NGROK

    شمازمان زیادی را صرف پیاده سازی پروژه هایتان می کنید، دراین فکر هستید …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *