ورود

View Full Version : لاگ کردن خطا



Veteran
پنج شنبه 30 مرداد 1393, 22:14 عصر
سلام
خب یک مشکلی که هست لاگ کردن خطاها در پروژه هست که کمک میکنه خطا رو بهتر و سریعتر پیدا و رفع کنیم !
مثلا همین الان یکی از دوستان گفتن برنامه مشکل داره ؟! من تست کردم و مشکلی نداشت.خلاصه با کلی سوال جواب تونستم بفهمم که قضیه چیه.
یک راهی که فریمورک Yii برای ما در نظر گرفته
اینه


Yii::trace("The actionLogin() method is being requested", "application.controllers.SiteController");

Yii::log("Failed login attempt", "warning", "application.controllers.SiteController");
اما خب تصور کنید 50 جدول و 50 مدل دارید ! و هرکدوم یک کنترلر و هر کنترلر بیش از 10 اکشن :کف:
در این صورت ادم با یک مشکلی که روبه رو میشه اینکه باید بشینه و اکشن هارو تغییر بده تا خطاها لاگ بشه :کف: که نیازمند چندتا کارگر هم میشه :قهقهه:
حالا راه حلی برای این مشکل وجود داره ؟ :متفکر: که بتونیم سریعتر سیستم لاگ رو در سراسر برنامه فعال کنیم :متفکر:

MMSHFE
جمعه 31 مرداد 1393, 08:10 صبح
یک راه خیلی خوب اینه که از کنترلر والد (protected/components/Controller.php) و متد beforeAction استفاده کنید:

class Controller extends CController {
public function beforeAction()
{
Yii::trace('The action "' . $this->action->id . '" from the controller "' . $this->id . '" was requested.', 'application.controllers.' . $this->id . 'Controller');
}
// ...
}
البته در کنارش میتونید کوئریها رو هم لوگ کنید که کمک زیادی میکنه به شما. برای این کار، تنظیمات protected/config/main.php رو اینطوری اصلاح کنید:

return array(
// ...
'components' => array(
// ...
'db' => array(
// ...
'enableParamLogging'=>true,
// ...
),
// ...
'log' => array(
// ...
'routes' => array(
// ...
array(
'class'=>'CFileLogRoute',
'levels'=>'trace',
'categories'=>'system.db.*',
'logFile'=>'sql.log',
),
// ...
),
// ...
),
// ...
),
// ...
);