Stack Trace

[right]سلام.

وقتی خطایی رخ میده، توی فایل مربوط به لاگ ها، یه همچین چیزی نشون داده میشه :[/right]

[left]


2014/07/24 17:07:04 [error] [exception.CException] exception 'CException' with message 'Property "SiteController.sample" is not defined.' in C:\xampp\htdocs\test\framework\base\CComponent.php:130

Stack trace:

#0 C:\xampp\htdocs\test\protected\controllers\SiteController.php(19): CComponent->__get('sample')

#1 C:\xampp\htdocs\test\framework\web\actions\CInlineAction.php(49): SiteController->actionIndex()

#2 C:\xampp\htdocs\test\framework\web\CController.php(308): CInlineAction->runWithParams(Array)

#3 C:\xampp\htdocs\test\framework\web\CController.php(286): CController->runAction(Object(CInlineAction))

#4 C:\xampp\htdocs\test\framework\web\CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)

#5 C:\xampp\htdocs\test\framework\web\CWebApplication.php(282): CController->run('index')

#6 C:\xampp\htdocs\test\framework\web\CWebApplication.php(141): CWebApplication->runController('site/index')

#7 C:\xampp\htdocs\test\framework\base\CApplication.php(180): CWebApplication->processRequest()

#8 C:\xampp\htdocs\test\index.php(7): CApplication->run()

#9 {main}

REQUEST_URI=/test/site/index

HTTP_REFERER=http://localhost/test/site/login

---

[/left]

[right]چطور میتونم تعداد فایل های نمایش داده شده رو کم کنم. نمیخوام انقد شلوغ بشه فایل لاگ ها!

مثلا فقط یه سطح رو نشون بده. یعنی اینجوری بشه:[/right]

[left]


2014/07/24 17:07:04 [error] [exception.CException] exception 'CException' with message 'Property "SiteController.sample" is not defined.' in C:\xampp\htdocs\test\framework\base\CComponent.php:130

Stack trace:

#0 C:\xampp\htdocs\test\protected\controllers\SiteController.php(19): CComponent->__get('sample')

REQUEST_URI=/test/site/index

---

[/left]

[right]یعنی نمیشه یه همچین کاری کرد !!؟

چرا هیج کس جواب نمیده !!

:( [/right]

[rtl]

پیشنهاد می کنم بجای تغییر اون خودت یه error handler به سایتت اضافه کنی

توی کانفیگ باید ست کنی

[/rtl]




'errorHandler'=>array(

	'errorAction'=>'site/error',

),



[rtl]

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

مثلا تو هاست من چون بعضی وقت ها ارتباطم از دیتابیس حذف می شد تصمیم گرفتم موقتا یه لاگ فایلی درست کنم که مچ هاست رو بگیرم و بهشون نشون بدم یه همچین چیزی نوشتم که لاگ رو می ریخت تو یه فایل xml بین یه تگ ساختگی به اسم error

[/rtl]




  public function actionError(){

    if($error=Yii::app()->errorHandler->error){

		$this->render('error');

		

		$xml = new DOMDocument('1.0', 'utf-8');

		$xml->formatOutput = true;

		$xml->preserveWhiteSpace = false;

		$xml->load(Yii::app()->basePath.'/errorlog.xml');


		$errors = $xml->getElementsByTagName('errors')->item(0);		

		if ($errors) {

		   	$error_node = $xml->createElement("error_node");

			$message = $xml->createElement("message");

			$trace = $xml->createElement("trace");

			

			$message->nodeValue = $error['message'];

			$trace->nodeValue = $error['trace'];

			

			$error_node->appendChild($message);

			$error_node->appendChild($trace);

			$errors->appendChild($error_node);

		}

		//save

		$xml->save(Yii::app()->basePath.'/errorlog.xml');				

	}

  }



[right]ممنون بابت راهنمایی…

ولی این چیزی که من میخوام

error handling

نیست… برای ارور ها همین چیزی گفتین رو نوشتم.

الان منظورم لاگ گذاشتنه که هرجایی که لازم دارم به همچین چیزی مینویسم:

Yii::log(‘my log’);

که با تنظیماتی که توی فایل کانفیگ دادم، بسته به نوع لاگ، توی یه فایل جداگانه ذخیره میشه.

توی فایل کانفیگ، یه همچین چیزی نوشتم:[/right]


'errorHandler'=>array(

	// use 'site/error' action to display errors

	'errorAction'=>'base/error',

       ),


        'log' => array(

            'class' => 'CLogRouter',

            'routes' => array(

                array(

                    'class' => 'CFileLogRoute',

                    'levels' => 'error',

                    'logFile' => 'error.log',

                ),

                array(

                    'class' => 'CFileLogRoute',

                    'levels' => 'info',

                    'logFile' => 'info.log',

                ),

                array(

                    'class' => 'CFileLogRoute',

                    'levels' => 'warning',

                    'logFile' => 'warning.log',

                ),

            ),

        ),

[right]من فقط میخوام تعداد خط ها رو کم کنم.[/right]

[font="Tahoma"][rtl]شما کافیه تا از کلاس CFileLogRoute یک کلاس اکستند کنی و متد processLogs اون رو override کنی[/rtl][/font]

[size="2"][rtl][/size]

[size="2"][font="Tahoma"]سلام. فایل index.php رو باز کن (فایلی که توی ریشه وب سایت قرار داره) و عدد مربوط به دستور زیر رو به 1 تغییر بده[/font][/size]

[size="2"][/rtl][/size]

[size="2"]




defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);



[/size]

[right]سلام

فایل لاگ من به همون تعداد خطوط کم رو ذخیره میکنه

[/right]

index.php

// remove the following lines when in production mode

defined(‘YII_DEBUG’) or define(‘YII_DEBUG’,true);

// specify how many levels of call stack should be shown in each log message

defined(‘YII_TRACE_LEVEL’) or define(‘YII_TRACE_LEVEL’,0);

main.php

‘routes’=>array(

			array(


				'class'=>'CFileLogRoute',


				'levels'=>'error, warning,profile, info,trace',


                                'categories'=>'system.*',


			),