Welcome to Abdul Malik Ikhsan's Blog

Zend Framework : Zend_Log – Working with Logs

Posted in Tutorial PHP, Zend Framework by samsonasik on April 17, 2011

Sebegitu pentingnya sebuah sejarah, sampai-sampai beberapa framework menambahkan fitur log, termasuk Zend Framework. Dengan adanya application log, kita bisa mengetahui apa saja yang telah terjadi yang bersinggungan dengan aplikasi kita. Log yang ada, salah satunya, bisa kita simpan di dalam file.
Kali ini, saya akan mencoba memaparkan penggunaan Zend_Log dengan media penyimpanan file dengan teknik Stream.
Pertama, yang kita butuhkan adalah file yang kita tunjuk sebagai media penyimpanan log, anggaplah kita simpan dalam PROJECTKITA\log\application.log, seperti berikut :


Kalau sudah, kita atur deh ErrorController kita sebagai berikut :

<?php
class ErrorController extends Zend_Controller_Action
{
public function errorAction()
{
$errors = $this->_getParam('error_handler');
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
// 404 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = 'Page not found';
break;
default:
// application error
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = 'Application error';
break;
}

// Log exception, if logger available
if ($log = $this->getLog()) {
$log->crit($this->view->message . " : ". $errors->exception);
}

// conditionally display exceptions
if ($this->getInvokeArg('displayExceptions') == true) {
$this->view->exception = $errors->exception;
}

$this->view->request   = $errors->request;
}

public function getLog()
{
$bootstrap = $this->getInvokeArg('bootstrap');
if (!$bootstrap->hasPluginResource('Log')) {
return false;
}
$log = $bootstrap->getResource('Log');
return $log;
}

}

Selanjutnya, kita setting di application.ini kita, tambahkan kode berikut :

;call Zend_Log_Writer_Stream
resources.log.stream.writerName = "Stream"
resources.log.stream.writerParams.stream = APPLICATION_PATH "/../log/application.log"

Dari kode yang telah kita buat di atas, semua critical error akan dicatat dalam file application.log seperti berikut :

2011-04-16T20:54:33+07:00 CRIT (2): Page not found : exception 'Zend_Controller_Action_Exception' with message 'Action "aa" does not exist and was not trapped in __call()' in D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Controller\Action.php:485
Stack trace:
#0 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Controller\Action.php(515): Zend_Controller_Action->__call('aaAction', Array)
#1 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('aaAction')
#2 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#3 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#4 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#5 D:\Zend\Apache2\htdocs\zftutwordpress\public\index.php(27): Zend_Application->run()
#6 {main}

Nah, bagaimana ketika kita mempunyai hal aktivitas lain yang ingin kita simpan juga dalam history ? Yang kita perlukan adalah meng-inisialisasi resource dalam file Bootstrap.php kita dengan menambahkan function _init* sebagai berikut :

protected function _initLog()
{
if ($this->hasPluginResource('log')){
$r = $this->getPluginResource('log');
$log = $r->getLog();
Zend_Registry::set('log', $log);
}
}


Kalau sudah, kita coba test dengan memanggil di sembarang action ( misal di TestlogController dengan action indexAction ) sebagai berikut  :

Zend_Registry::get('log')->info('something happened');

maka, di file log akan tampil semacam berikut :

2011-04-17T00:03:15+07:00 INFO (6): something happened

Hm…, asyik kan ? semoga bermanfaat 😀

Referensi :
http://www.zendcasts.com/transparent-logging-with-zend_log/2010/06/
http://framework.zend.com/manual/en/zend.log.writers.html
http://id.php.net/stream
http://en.wikipedia.org/wiki/Server_log
http://framework.zend.com/manual/en/learning.quickstart.create-model.html
http://en.wikipedia.org/wiki/Stream_%28computing%29

Leave a comment