Yii menyediakan fitur pencatatan fleksibel dan bisa diperluas. Pencatatan pesan dapat diklasifikasikan berdasarkan tingkat log atau kategori pesan. Menggunakan filter tingkat dan kategori, pesan yang dipilih selanjutnya bisa dirutekan ke tujuan yang berbeda, misalnya file, email, jendela browser, dll.
Pesan dapat dicatat dengan memanggil Yii::log atau Yii::trace. Perbedaan diantara kedua metode ini adalah bahwa yang kedua hanya mencatat pesan saat aplikasi dalam mode debug.
Yii::log($message, $level, $category);
Yii::trace($message, $category);
Ketika mencatat pesan, kita harus menetapkan tingkat dan kategorinya.
Kategori adalah string dalam bentuk xxx.yyy.zzz
yang mirip dengan
alias path. Contoh, jika pesan dicatat
dalam CController, kita bisa menggunakan kategori system.web.CController
.
Tingkat pesan harus salah satu dari nilai berikut:
trace
: ini adalah tingkat yang dipakai oleh Yii::trace. kegunaannya untuk melacak
alur eksekusi aplikasi selama pengembangan.
info
: ini untuk pencatatan informasi umum.
profile
: ini untuk profil performansi yang akan segera
dijelaskan.
warning
: ini untuk pesan peringatan.
error
: ini untuk pesan kesalahan fatal.
Pesan yang dicatat menggunakan Yii::log or Yii::trace dipelihara dalam memori. Kita biasanya harus menampilkannya dalam jendela browser, atau menyimpannya dalam beberapa media penyimpan persisten seperti file, email. Ini disebut mengirimkan pesan, misalnya mengirimkan pesan ke tujuan yang berbeda.
Dalam Yii, pengiriman pesan diatur oleh komponen aplikasi CLogRouter. Ia mengatur satu set apa yang disebut rute log. Setiap rute log mewakili satu tujuan log. Pesan yang dikirimkan bersamaan dengan rute log bisa disaring berdasarkan pada tingkat dan kategorinya.
Untuk menggunakan pengiriman pesan, kita harus menginstalasi dan mengaktifkan komponen aplikasi CLogRouter. Kita juga harus mengkonfigurasi properti routes dengan rute log yang kita inginkan. Berikut ini memperlihatkan contoh konfigurasi aplikasi yang dibutuhkan:
array(
......
'preload'=>array('log'),
'components'=>array(
......
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'trace, info',
'categories'=>'system.*',
),
array(
'class'=>'CEmailLogRoute',
'levels'=>'error, warning',
'emails'=>'admin@example.com',
),
),
),
),
)
Dalam contoh di atas, kita memiliki dua rute log. Rute pertama adalah
CFileLogRoute yang menyimpan pesan dalam sebuah file di bawah direktori
runtime aplikasi. Hanya pesan-pesan yang tingkatnya adalah trace
atau info
dan
kategorinya dimulai dengan system.
yang disimpan. Rute kedua adalah
CEmailLogRoute yang mengirimkan pesan ke alamat email yang sudah ditetapkan.
Hanya pesan-pesan yang tingkatnya error
atau warning
yang dikirimkan.
Rute log berikut tersedia dalam Yii:
Info: Pengiriman pesan terjadi di akhir siklus permintaan saat ini saat event onEndRequest dimunculkan. Untuk mengakhiri pemrosesan permintaan saat ini secara eksplisit, panggil CApplication::end() daripada
die()
atauexit()
, karena CApplication::end() akan memunculkan event onEndRequest dan pesan bisa dicatat dengan benar.
Seperti yang sudah disebutkan, pesan bisa disaring berdasarkan tingkat dan kategorinya sebelum mengirimkan rute log. Ini dikerjakan dengan menyetel properti levels dan categories pada rute log terkait. Multipel tingkat atau kategori harus diakhiri dengan koma.
Karena kategori pesan dalam bentuk xxx.yyy.zzz
, kita bisa memperlakukannya
sebagai hirarki kategori. Bahkan, kita katakan xxx
adalah leluhur
xxx.yyy
yang merupakan leluhur xxx.yyy.zzz
. Selanjutnya kita bisa menggunakan
xxx.*
untuk mewakili kategori xxx
dan semua anak dan cucu
kategori.
Pengukuran performansu adalah jenis pencatatan pesan khusus. Pengukuran performansi bisa dipakai guna mengukur waktu yang dibutuhkan untuk blok kode yang ditetapkan dan mencari tahu hambatan apa pada performansi.
Untuk menggunakan pengukuran performansi, kita harus mengidentifikasi blok kode yang akan diukur. Kita tandai awal dan akhir setiap blok kode dengan menyisipkan metode berikut:
Yii::beginProfile('blockID');
...blok kode sedang diukur...
Yii::endProfile('blockID');
di mana blockID
adalah ID yang secara unik mengidentifikasi blok kode.
Catatan, blok kode harus diulang dengan benar. Yakni, blok kode tidak bisa berseberangan dengan yang lain. Ia harus dalam tingkat paralel atau dikurung seluruhnya oleh blok kode lain.
Untuk memperlihatkan hasil pengukuran, kita harus menginstalasi komponen aplikasi CLogRouter dengan rute log CProfileLogRoute. Ini sama seperti yang kita lakukan dengan pengiriman pesan biasa. Rute CProfileLogRoute akan menampilkan hasil pengukuran di akhir halaman saat ini.
Pengukuran sangat berguna terutama saat bekerja dengan database karena eksekusi SQL
sering menjadi sumber performansi utama pada aplikasi. Sementara kita dapat menyisipkan
pernyataan beginProfile
dan endProfile
secara manual di tempat yang sesuai guna mengukur
waktu yang diperlukan dalam setiap eksekusi SQL, mulai dari versi 1.0.6, Yii menyediakan
pendekatan yang lebih sistematis untuk memecahkan masalah ini.
Dengan menyetel CDbConnection::enableProfiling menjadi true dalam konfigurasi aplikasi, setiap pernyataan SQL yang sedang dijalankan akan diukur. Hasilnya bisa ditampilkan menggunakan CProfileLogRoute yang sudah disebutkan sebelumnya, yang dapat memperlihatkan berapa lama waktu yang dibutuhkan dalam menjalankan pernyataan SQL. Kita juga dapat memanggil CDbConnection::getStats() untuk mengambil jumlah pernyataan SQL dan total waktu eksekusi.
Signup or Login in order to comment.