مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

Logging یا ثبت وقایع در فریمورک Yii


Yii یک فریمورک قابل تنظیم و قابل انعطاف می باشد. با استفاده از این فریمورک، می توانید براحتی انواع مختلفی از پیام های لاگ یا log message ها را ثبت کنید.

برای ثبت یک log message، باید یکی از متدهای زیر را فراخوانی کنید:

  • Yii::error() - پیغام های fatal error را ثبت می کند.
  • Yii::warning()- پیغام های warning را ثبت می کند.
  • Yii::info() - پیغام های همراه با برخی اطلاعات مفید را ثبت می کند.
  • Yii::trace() - پیغام های trace را ثبت می کند.این پیغام ها از نحوه ی اجرا یک تکه کد، ایجاد می شوند.

متد های فوق، log messageها را در دسته های مختلفی ثبت می کنند. آنها برای این کار، اینگونه از تابع استفاده می کنند:

function ($message, $category = 'application')
  • $message – در این متغیر، log message ذخیره می شود.
  • $category  - در این متغیر، دسته ی log message ذخیره می شود.

یک روش ساده و راحت برای نامگذاری scheme، استفاده از ثابت جادویی __METHOD__ است. به عنوان مثال :

Yii::info('this is a log message', __METHOD__);

یک log target یک نمونه از کلاس yii\log\Target می باشد، که همه log messageها را براساس دسته ها فیلتر می کند و آنها را به یک فایل، پایگاه داده و یا ایمیل منتقل می کند.

مرحله 1 - شما می توانید چندین  log targetرا ثبت کنید. به مثال زیر دقت کنید:

return [
   // the "log" component is loaded during bootstrapping time
   'bootstrap' => ['log'],
   'components' => [
      'log' => [
         'targets' => [
            [
               'class' => 'yii\log\DbTarget',
               'levels' => ['error', 'warning', 'trace', 'info'],
            ],
            [
               'class' => 'yii\log\EmailTarget',
               'levels' => ['error', 'warning'],
               'categories' => ['yii\db\*'],
               'message' => [
                  'from' => ['log@mydomain.com'],
                  'to' => ['admin@mydomain.com', 'developer@mydomain.com'],
                  'subject' => 'Application errors at mydomain.com',
               ],
            ],
         ],
      ],
   ],
];

در کد بالا، دو target ثبت شده است. target اول، تمام errorها، warningها،  trace ها و info message ها را انتخاب می کند و آنها را در یک پایگاه داده ذخیره می کند. target دوم، تمام errorها و warningها را به ایمیلِ admin ارسال می کند.

فریمورک Yii، از log targetهای درونی یا built-in زیر پشتیبانی می کند:

  • yii\log\DbTarget – این مورد log messageها را در یک پایگاه داده ذخیره می کند.
  • yii\log\FileTarget - این مورد log messageها را در فایل ذخیره می کند.
  • yii\log\EmailTarget - این مورد log messageها را به آدرس های ایمیل از پیش تعریف شده ارسال می کند.
  • yii\log\SyslogTarget - این مورد log messageها را در syslog با فراخوانی تابع پی اچ پی syslog() ذخیره می کند.

به طور پیش فرض، قالب و فرمت log messageها به صورت زیر می باشند:

Timestamp [IP address][User ID][Session ID][Severity Level][Category] Message Text

مرحله 2 - برای سفارشی کردن این فرمت، بایدpropety  با نام yii\log\Target::$prefix را پیکربندی کنید. برای مثال:

[
   'class' => 'yii\log\FileTarget',
   'prefix' => function ($message) {
      $user = Yii::$app->has('user', true) ? Yii::$app->get('user') :
      'undefined user';
      $userID = $user ? $user->getId(false) : 'anonym';
      return "[$userID]";
   }
]

قطعه کد بالا یک log target تنظیم می کند. بطوریکه ID کاربر جاری به عنوان پیشوند، برای همه log messageها لحاظ شود.

به طور پیش فرض، log messageها، مقادیر را از متغیرهای  global زیر می گیرند:

  • $_GET
  • $_POST
  • $_SESSION
  • $_COOKIE
  • $_FILES
  • $_SERVER

برای تغییر این روند، شما باید property با نام yii\log\Target::$logVars را با نام متغیرهایی که قصد دارید اضافه شوند، تنظیم کنید.

تمام log messageها توسط شیء logger در یک آرایه نگهداری می شوند. وقتی که آرایه از یک تعداد مشخصی از پیام ها بیشتر شود، شی logger پیام های ضبط شده برای log target ها را، حذف می کند (عدد پیش فرض 1000 است).

 

مرحله 3 - برای دستکاری این عدد، شما باید property با نام  flushInterval فراخوانی کنید.

return [
   'bootstrap' => ['log'],
   'components' => [
      'log' => [
         'flushInterval' => 50, // default is 1000
         'targets' => [...],
      ],
   ],
];

مرحله 5 - حال فایل config/web.php را اینگونه تغییر دهید.

<?php
   $params = require(__DIR__ . '/params.php');
   $config = [
      'id' => 'basic',
      'basePath' => dirname(__DIR__),
      'bootstrap' => ['log'],
      'components' => [
         'request' => [
            // !!! insert a secret key in the following (if it is empty) - this
               //is required by cookie validation
            'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
         ],
         'cache' => [
            'class' => 'yii\caching\FileCache',
         ],
         'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
         ],
         'errorHandler' => [
            'errorAction' => 'site/error',
         ],
         'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
         ],
         'log' => [
            'flushInterval' => 1,
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
               [
                  'class' => 'yii\log\FileTarget',
                  'exportInterval' => 1,
                  'logVars' => []
               ],
            ],
         ],
         'db' => require(__DIR__ . '/db.php'),
      ],
      'modules' => [
         'hello' => [
            'class' => 'app\modules\hello\Hello',
         ],
      ],
      'params' => $params,
   ];
   if (YII_ENV_DEV) {
      // configuration adjustments for 'dev' environment
      $config['bootstrap'][] = 'debug';
      $config['modules']['debug'] = [
         'class' => 'yii\debug\Module',
      ];
      $config['bootstrap'][] = 'gii';
      $config['modules']['gii'] = [
         'class' => 'yii\gii\Module',
      ];
   }
   return $config;
?>

در کد بالا، ما کامپوننت log را تعریف نمودیم، propertyهای flushInterval و exportInteval را با مقدار 1 تنظیم کردیم، بنابراین بلافاصله همه log messageها در فایل های log نمایش داده می شوند. همچنین ما پروپرتی levels را حذف نمودیم. این بدین معنی است که log messageهای تمام دسته ها (error, warning, info, trace) در فایل های log نمایش داده می شود نه log message های دسته ی خاصی.

مرحله 6 - سپس یک تابع به نام actionLog() در SiteController ایجاد کنید.

public function actionLog() {
   Yii::trace('trace log message');
   Yii::info('info log message');
   Yii::warning('warning log message');
   Yii::error('error log message');
}

در کد بالا، ما از هر دسته ای، چهار log message به فایل های log اضافه نمودیم.

مرحله 7 – در نوار آدرسبار مرورگر وب تان آدرس http://localhost:8080/index.php?r=site/log را تایپ کنید. Log messageها باید در دایرکتوری app/runtime/logs در فایل app.log ظاهر شوند.

فصلِ: 14 , تعداد قسمت ها: 188 , سطح: صفر تا صد

این فصل در یک نگاه:

سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…
فصلِ: 8 , تعداد قسمت ها: 77 , سطح: صفر تا صد

این فصل در یک نگاه:

  پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید