CodeIgniter Tutorial - Penggunaan Hooks untuk Query Logging pada CodeIgniter 3

Demo Program


Pada CodeIgniter ada fitur hooks yang bisa kita modifikasi dan kita manfaatkan untuk mengikuti proses eksekusi tertentu tanpa meretas file inti dari Codeigniter itu sendiri. Sumber (CodeIgniter Hooks).

Dalam project nyata saya menggunkan hooks untuk mencatat dan menyimpan query yang di eksekusi saat aplikasi dijalankan. Contohnya ketika user menjalankan aplikasi dan melakukan aksi-aksi seperti menampilkan data, menambah data, mengedit data dan menghapus data. Maka aksi dari user tersebut akan disimpan dalam bentuk Query (SQL) dan disimpan dalam file dengan ektensi yang dapat kita tentukan seperti .txt, .php, .sql dll.

Untuk lebih mengerti bagaimana cara penggunaan hooks dan seperti apa output programnya silahkan ikuti tutorial ini sampai akhir.

Langkah 1 Mengaktifkan fitur hooks, ubah FALSE menjadi TRUE di direktori application/config/config.php

$config['enable_hooks'= TRUE;

Langkah 2 Definisikan dan edit hook di direktori application/config/hooks.php, setiap hook ditentukan sebagai array dengan prototype seperti dibawah ini:
<?php
defined('BASEPATH'OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files.  Please see the user guide for info:
|
|       https://codeigniter.com/user_guide/general/hooks.html
|
*/
$hook['post_controller'= array(       // post_controller menunjukan eksekusi hooks                                                                                    setelah pengontrolan selesai
        'class'    => 'Db_log',         // Nama Class
        'function' => 'logQueries',     // Nama method yang di eksekusi dari class
        'filename' => 'db_log.php',     // Nama File Hook
        'filepath' => 'hooks'           // nama folder tempat file hook disimpan
);


Langkah 3
Buatlah sebuah file dengan nama db_log.php dan simpan di direktori application/hooks/db_log.php, dan isi dengan script berikut:
<?php

// Nama dari class yg disebutkan di file hooks.php
class Db_log
{
    function __construct()
    {
        date_default_timezone_set("Asia/Jakarta");
    }

    // Nama dari method yang disebutkan di file hooks.php
    function logQueries()
    {
        $CI = & get_instance();
        $filepath = APPPATH . 'logs/QueryLog-' . $CI->session->userdata('nama_lengkap') . "-"date('d-M-Y') . '.txt';  // Buat file query log dengan tgl hari ini di folder application/logs
        $handle = fopen($filepath, "a+"); // buka file dg mode Read/write
        $times = $CI->db->query_times;    // ambil waktu eksekusi dari semua query yg di eksekusi oleh controller

        $dir = "----------" . $CI->router->directory . $CI->router->class . "/" . $CI->router->method . "----------";
        fwrite($handle, $dir . "\n");    
        foreach ($CI->db->queries as $key => $query) { 
            if($query){
                $sql =  $CI->session->userdata('nama_lengkap') . " - " ."Tanggal/Waktu : "date("d-M-Y/H:i:s A") . " => " . trim(preg_replace('/\s+/', ' ', $query)) . " Execution Time:" . $times[$key]; // Generate hasil query
                fwrite($handle, $sql . "\n");              // tulis di file log
            }
        } 
        fclose($handle);      // Close the file
    }


}
Sampai disini kita telah selesai membuat hooks, ketika user login dan masuk ke situs web kita maka program akan membuat satu file dengan nama QueryLog-Administrator-14-Jan-2021.txt dan file ini akan dibuat secara otomatis dan mencatat aksi-aksi yang dilakukan oleh user  yang sedang login seperti hapus data, edit data, tambah data.

Demo Program


Itulah cara penggunaan hook di codeigniter, semoga bermanfaat!!!

Posting Komentar

0 Komentar