Yii - लॉगिंग

Yii एक उच्च अनुकूलन और एक्स्टेंसिबल फ्रेमवर्क प्रदान करता है। इस ढांचे की मदद से आप विभिन्न प्रकार के संदेशों को आसानी से लॉग इन कर सकते हैं।

किसी संदेश को लॉग करने के लिए, आपको निम्न विधियों में से एक को कॉल करना चाहिए -

  • Yii::error() - एक घातक त्रुटि संदेश रिकॉर्ड करता है।

  • Yii::warning() - एक चेतावनी संदेश रिकॉर्ड करता है।

  • Yii::info() - कुछ उपयोगी जानकारी के साथ एक संदेश रिकॉर्ड करता है।

  • Yii::trace() - कोड का एक टुकड़ा कैसे चलाता है एक संदेश रिकॉर्ड करता है।

उपरोक्त विधियाँ विभिन्न श्रेणियों में लॉग संदेश दर्ज करती हैं। वे निम्नलिखित फ़ंक्शन हस्ताक्षर साझा करते हैं -

function ($message, $category = 'application')

कहाँ -

  • $message - लॉग संदेश दर्ज किया जाना है

  • $category - लॉग संदेश की श्रेणी

नामकरण योजना का एक सरल और सुविधाजनक तरीका PHP __METHOD__ जादू स्थिरांक का उपयोग कर रहा है। उदाहरण के लिए -

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

लॉग लक्ष्य yii \ log \ target वर्ग का एक उदाहरण है। यह श्रेणियों के सभी लॉग संदेशों को फ़िल्टर करता है और उन्हें फ़ाइल, डेटाबेस और / या ईमेल पर निर्यात करता है।

Step 1 - आप कई लॉग लक्ष्य को पंजीकृत कर सकते हैं, जैसे।

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' => ['[email protected]'],
                  'to' => ['[email protected]', '[email protected]'],
                  'subject' => 'Application errors at mydomain.com',
               ],
            ],
         ],
      ],
   ],
];

उपरोक्त कोड में, दो लक्ष्य पंजीकृत हैं। पहला लक्ष्य सभी त्रुटियों, चेतावनियों, निशानों और सूचना संदेशों का चयन करता है और उन्हें डेटाबेस में सहेजता है। दूसरा लक्ष्य एडमिन ईमेल पर सभी त्रुटि और चेतावनी संदेश भेजता है।

Yii निम्नलिखित अंतर्निहित लॉग लक्ष्य प्रदान करता है -

  • yii\log\DbTarget - स्टोर एक डेटाबेस में संदेशों को लॉग करते हैं।

  • yii\log\FileTarget - फ़ाइलों में लॉग संदेश बचाता है।

  • yii\log\EmailTarget - पूर्वनिर्धारित ईमेल पतों पर लॉग संदेश भेजता है।

  • yii\log\SyslogTarget - PHP फ़ंक्शन syslog () कॉल करके लॉग संदेश को syslog में सहेजता है।

डिफ़ॉल्ट रूप से, लॉग संदेशों को निम्नानुसार स्वरूपित किया जाता है -

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

Step 2 - इस प्रारूप को अनुकूलित करने के लिए, आपको कॉन्फ़िगर करना चाहिए 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]";
   }
]

उपरोक्त कोड स्निपेट वर्तमान उपयोगकर्ताआईडी के साथ सभी लॉग संदेशों को उपसर्ग करने के लिए एक लॉग लक्ष्य को कॉन्फ़िगर करता है।

डिफ़ॉल्ट रूप से, लॉग संदेशों में इन वैश्विक PHP चर से मूल्य शामिल हैं: $ _GET, $_POST, $_SESSION, $_COOKIE, $_FILES, और $ _SERVER। इस व्यवहार को संशोधित करने के लिए, आपको कॉन्फ़िगर करना चाहिएyii\log\Target::$logVars वे चर जिन्हें आप शामिल करना चाहते हैं उनके नाम के साथ संपत्ति।

सभी लॉग संदेश को लकड़हारे ऑब्जेक्ट द्वारा एक सरणी में बनाए रखा जाता है। लकड़हारा ऑब्जेक्ट रिकॉर्ड किए गए संदेशों को लॉग लक्ष्य पर प्रवाहित करता है, जब भी सरणी एक निश्चित संख्या में संदेश जमा करती है (डिफ़ॉल्ट 1000 है)।

Step 3 - इस नंबर को कस्टमाइज़ करने के लिए, आपको कॉल करना चाहिए flushInterval property

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

यहां तक ​​कि जब लकड़हारा ऑब्जेक्ट लक्ष्य को लॉग करने के लिए लॉग संदेश को फ्लश करता है, तो उन्हें तुरंत निर्यात नहीं किया जाता है। निर्यात तब होता है जब लॉग लक्ष्य एक निश्चित संख्या में संदेश जमा करता है (डिफ़ॉल्ट 1000 है)।

Step 4 - इस नंबर को कस्टमाइज़ करने के लिए, आपको कॉन्फ़िगर करना चाहिए exportInterval संपत्ति।

[
   'class' => 'yii\log\FileTarget',
   'exportInterval' => 50, // default is 1000
]

Step 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;
?>

उपरोक्त कोड में, हम लॉग एप्लिकेशन घटक को परिभाषित करते हैं, सेट करते हैं flushInterval तथा exportIntevalगुण 1 से ताकि सभी लॉग संदेश लॉग फ़ाइलों में तुरंत दिखाई दें। हम लॉग लक्ष्य के स्तर की संपत्ति को भी छोड़ देते हैं। इसका अर्थ है कि लॉग फ़ाइलों में सभी श्रेणियों (त्रुटि, चेतावनी, जानकारी, ट्रेस) के लॉग संदेश दिखाई देंगे।

Step 6 - फिर, SiteController में एक्शनलॉग () नामक एक फ़ंक्शन बनाएं।

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

उपरोक्त कोड में, हम लॉग फाइल में विभिन्न श्रेणियों के चार लॉग संदेश लिखते हैं।

Step 7 - URL टाइप करें http://localhost:8080/index.php?r=site/logवेब ब्राउजर के एड्रेस बार में। लॉग संदेश ऐप / रनटाइम / लॉग निर्देशिका के तहत ऐप में दिखाई देनी चाहिए। फाइल।