class DummyController extends Controller
{
public function actions() {
return array('test' => 'application.controllers.dummy.TestAction');
}
public function actionTestLog(){
Yii::log('test log','info','custom'); // ini ngelog di file
}
}
trus sample class actionnya seperti ini
class TestAction extends CAction
{
public function run() {
Yii::log('test log','info','custom'); // ini gak ngelog ? tanya kenapa??
}
}
ternyata sistem logging di YII gak realtime yah. log di simpan pada array yang hingga akhir script baru di execute ama log router.
dikarenakan di script saya yang sesungguhnya ada exit nya, yang mengakibatkan proses php terhenti dan Yii blom sempat menuliskan lognya… baru dikumpulkan saja … OMG…
ada cara (config) untuk merubah jadi realtime gak yah… yah walaupun plus-minus… kadang tiap orang punya kebutuhannya masing2
gw ada solusi nih buat yang butuh realtime logging.
caranya extends class CLogRouter
class LogRouter extends CLogRouter
{
public function init(){
parent::init();
Yii::app()->detachEventHandler('onEndRequest',array($this,'processLogs'));
Yii::getLogger()->autoFlush = 1;
}
public function collectLogs($event) {
parent::processLogs($event);
}
}
extend juga class CFileLogRoute
class FileLogRoute extends CFileLogRoute
{
public function collectLogs($logger, $processLogs=false)
{
$logs=$logger->getLogs($this->levels,$this->categories);
$this->logs = $logs;
if($processLogs)
{
if($this->filter!==null)
Yii::createComponent($this->filter)->filter($this->logs);
if(!empty($this->logs))
$this->processLogs($this->logs);
}
}
}
trus config main.php nya sedikit dirubah
'log'=>array(
'class'=>'application.components.LogRouter', // ini diarahkan ke class extend yang kita buat
'routes'=>array(
array(
'class'=>'application.components.FileLogRoute', // ini juga
'levels'=>'trace,info,error,warning',
),
),
),
tidak disarankan untuk yang menggunakan email logging… bisa flood bos!!