How To Log All Query

Seme Framework still has missing feature for capturing all query statement that running by framework.

But, it is still possible for you to capture the query. Here is how to achieved that.

Create the log writer Class

First thing first we have to create a class that can write log into a file. Lets say we created the Seme_Log2 class on kero/lib/seme_log2.php, and the here is the source code.

<?php
class Seme_Log2 {
  var $directory = '';
  var $filename = 'seme.log';
  var $path = '';

  public function __construct(){
    $this->directory = SENEROOT;
    $this->path = $this->directory.DIRECTORY_SEPARATOR.$this->filename;
    if(!file_exists($this->path)) touch($this->path);
    if(!is_writable($this->path)){
      $this->directory = SENECACHE;
      $this->path = $this->directory.DIRECTORY_SEPARATOR.$this->filename;
      if(is_writable($this->path)) touch($this->path);
    }
  }
  public function changeFilename($filename){
    $this->filename = $filename;
    $this->directory = SENEROOT;
    $this->path = $this->directory.DIRECTORY_SEPARATOR.$this->filename;
    if(!file_exists($this->path)) touch($this->path);
    if(!is_writable($this->path)){
      $this->directory = SENECACHE;
      $this->path = $this->directory.DIRECTORY_SEPARATOR.$this->filename;
      if(is_writable($this->path)) touch($this->path);
    }
  }

  public function write($str){
    $f = fopen($this->path,'a+');
    fwrite($f,date("Y-m-d H:i:s").' - ');
    fwrite($f,$str.PHP_EOL);
    fclose($f);
  }
  public function getPath(){
    return $this->path;
  }
}

Override the Class Model

Open kero/sine/SENE_MySQLi_Engine.php and then add the following codes.

After exec method

Find method exec on kero/sine/SENE_MySQLi_Engine.php, and then add this code.

public function exec($sql){
.
.
.
if(!class_exists('Seme_Log2')) require_once(SENEROOT.'kero/lib/seme_log2.php');
$sl = new Seme_Log2();
$sl->changeFilename('sql.log');
$sl->write('SENE_MySQLi::exec -- '.$sql);

After query method

Find method exec on kero/sine/SENE_MySQLi_Engine.php, and then add this code.

.
.
.
public function query($sql,$cache_enabled=0,$flushcache=0,$type="object"){
if(!class_exists('Seme_Log2')) require_once(SENEROOT.'kero/lib/seme_log2.php');
$sl = new Seme_Log2();
$sl->changeFilename('sql.log');
$sl->write('SENE_MySQLi::exec -- '.$sql);

Conclusion

After modified the core library, we can view the query log through sql.log.