Tulisan ini adalah lanjutan dari tulisan sebelumnya.
Penggunaan Zend_Log
Untuk membuat log message yang pertama kali dilakukan adalah membuat object logger, kemudian membuat object writer dan dimasukkan ke dalam object logger. Satu hal yang perlu diingat adalah, object logger harus mempunyai setidaknya satu writer agar bisa menulis log messaage.
Contoh:
<?php
require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Stream.php';
// membuat object logger
$logger = new Zend_Log();
// membuat object writer, untuk menuliskan log
// ke dalam file application.log
$writer = new Zend_Log_Writer_Stream('application.log');
// menambahkan writer ke dalam object logger
$logger->addWriter($writer);
?>Object writer dapat juga dimasukkan ke dalam object logger pada saat membuat instan object logger.
<?php
$writer = new Zend_Log_Writer_Stream('application.log');
$logger = new Zend_Log($writer);
?>Untuk menuliskan log message ke dalam file application.log, dapat dilakukan dengan menggunakan method log() pada object logger, dengan menentukan level priority dari log tersebut pada argumen kedua.
<?php
$logger->log('Testing Info Message', Zend_Log::INFO);
?>Kemudian kita lihat isi dari file application.log
$ cat application.log 2009-03-29T12:28:01+07:00 INFO (6): Testing Info Message
Object logger mempunyai magic method yang memungkinkan kita membuat log message berdasarkan priority dengan memanggil priority tersebut sebagai method. Contoh:
<?php
$logger->log('Testing Info Message', Zend_Log::INFO);
$logger->log('Testing Error Message', Zend_Log::ERR);
// dapat juga dilakukan dengan cara berikut
$logger->info('Testing Info Message');
$logger->err('Testing Error Mesage');
?>Dari contoh kode di atas, kita sudah bisa menuliskan log message ke dalam sebuah file.
Penggunaan formatter, filter dan priority dalam Zend_Log
Seperti yang sudah dibahas pada tulisan sebelumnya, log message yang dihasilkan Zend_Log terdiri dari beberapa event log. Dan secara default, format log messagenya adalah:
'%timestamp% %priorityName% (%priority%): %message%'
Dalam bekerja dengan MVC pattern dan memiliki banyak controller, tentunya kita ingin mengetahui log message yang dihasilkan itu berasal dari controller yang mana. Default format log message tidak memenuhi kebutuhan akan hal ini. Untuk itu pada contoh kode berikut saya akan membuat extend dari class Zend_Log dan membuat format log message sendiri dengan menggunakan formatter. Dan pada kode tersebut juga saya akan memisahkan log message error dengan log message lainnya dengan menggunakan filter.
<?php
require_once 'Zend/Log/Formatter/Simple.php';
require_once 'Zend/Log/Filter/Priority.php';
require_once 'Zend/Log/Writer/Stream.php';
require_once 'Zend/Log.php';
class DollyAswin_Log extends Zend_Log
{
public function __construct()
{
// set formatter, disini ditambahkan %class% untuk informasi
// log message dihasilkan dari class mana
$format = '%timestamp% (%priorityName%) %priority% %class%: %message%'
. PHP_EOL;
$this->_formatter = new Zend_Log_Formatter_Simple($format);
parent::addWriter($this->_errorWriter());
parent::addWriter($this->_allWriter());
parent::__construct();
}
/**
* Writer untuk log message error
* Log message error akan dituliskan ke dalam file error.log
*/
protected function _errorWriter()
{
$writer = new Zend_Log_Writer_Stream('error.log');
$writer->addFilter(new Zend_Log_Filter_Priority(Zend_Log::ERR));
$writer->setFormatter($this->_formatter);
return $writer;
}
/**
* Writer untuk log message yang lainnya
* Log message yang lainnya akan dituliskan ke dalam file system.log
*/
protected function _allWriter()
{
$writer = new Zend_Log_Writer_Stream('system.log');
$writer->setFormatter($this->_formatter);
return $writer;
}
}
?>Simpan kode di atas dalam folder DollyAswin dengan nama file Log.php. Class di atas akan disertakan dalam setiap controller, untuk membuat object logger dari class tersebut. Contoh:
<?php
require_once 'DollyAswin/Log.php';
class TesController
{
public function init()
{
// buat instant dari model Tes
$this->_tes = new Tes;
// buat object logger dari extend class
$this->_logger = new DollyAswin_Log();
// set event class dengan nama class yang memanggil logger
$this->_logger->setEventItem('class', __CLASS__);
}
public function add()
{
try {
$lastId = $this->_tes->insert($data);
$this->_logger->info('Insert ID ' . $lastId);
}
catch (Zend_Db_Exception $e) {
$this->_logger->err($e->getMessage());
}
}
}
?>Penggunaan class DollyAswin_Log sama dengan class Zend_Log, karena class tersebut adalah extend dari class Zend_Log. Cuma pada class tersebut, writer, filter dan formatternya sudah di set. Sehingga tidak perlu di set lagi di setiap controller, cukup dengan membuat object dari class tersebut saja.
Jika method add() dari controller di atas sukses dijalankan maka akan menghasilkan log message berikut pada file system.log
$ cat system.log 2009-03-29T12:28:01+07:00 INFO (6) TesController: Insert ID 1
Dan jika gagal maka akan menghasilkan log pada file error.log yang berisi pesan error dari aplikasi tersebut.
Dengan demikian, maka artikel "Buat Log Aplikasi PHP Anda Dengan Zend_Log" sudah selesai, Pembuatan log message dengan Zend_Log masih dapat dikembangkan lagi, seperti menulis log message ke database, dapat dilakukan dengan class Zend_Log_Writer_Db (class ini memerlukan dukungan Zend_Db). Semoga artikel ini bermanfaat bagi kita semua.
Wassalam.
Comments
makasih infonya
makasih infonya
Kirim Komentar