Podemos registrar logs de nuestra aplicación registrando en archivos o en su caso en la base de datos que en esta ultima manera es de que trata este tutorial, a continuación explico la manera de como implementar eta funcionalidad a sus aplicaciones hechas en CakePhp 2.0.x.
Como primer paso deberá crea la tabla en su base de datos:
CREATE TABLE IF NOT EXISTS `logs` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`type` VARCHAR(20) NOT NULL,
`time` datetime NOT NULL,
`message` text NOT NULL,
PRIMARY KEY (`id`)
);
Una vez creada la tabla de la base de datos procedemos a crear el modelo de nuestra tabla:
/*Model/Log.php*/
class Log
extends AppModel
{
public $name
= 'Log';
}
Una vez hecho lo anterior se procederá a crear la clase DataBaseLogger la cual tendrá la finalidad de insertar en nuestra db y no en los archivos logs, crear el archivo app/Lib/Log/Engine/DatabaseLogger.php con el siguiente contenido:
App::uses('CakeLogInterface','Log');
class DatabaseLogger implements CakeLogInterface{
function __construct($options = array()) {
App::import('Model', 'Log');
$this->Log = new Log;
}
function write($type, $message) {
$log['type'] = ucfirst($type);
$log['time'] = date('Y-m-d H:i:s');
$log['message'] = $message;
return $this->Log->save($log);
}
}
Por último solo nos resta definir nuestra variable de configuración Cake indicando que el metodo de registro de logs sera por medio de inserción en la base de datos para esto se agregara la constante de configuración en AppController
class AppController extends Controller {
function beforeFilter(){
CakeLog::config('otherFile',array(
'engine' => 'DatabaseLogger',
'model' => 'Log'));
}
}
?>
Donde Engine hace referencia a DatabaseLogger y model al modelo de la tabla en la que se insertaran los logs.
Ahora bien el siguiente código muestra como utilizar la clase estatíca CakeLog con la función de login
/*metodo de Controlador*/
function login(){
$this->layout = "tpl_login";
if( ! $this->Session->read('Auth.User') ){
if ($this->request->is('post')) {
if ($this->Auth->login()) {
CakeLog::write('info', 'User ' . $this->Auth->user('username') . ' successfully logged in.');
$this->redirect($this->Auth->redirect());
}else{
$this->Session->setFlash('Your username or password was incorrect.');
}
}
}else{
$this->redirect($this->Auth->redirect());
}
}
?>
Como se muestra en código anterior se utiliza la clase estatíca :
CakeLog::write('info', 'User ' . $this->Auth->user('username') . ' successfully logged in.');
Para registrar cuando inician sesión los usuarios, los tipos de logs definidos por CakePhp son:
'emergency'
'alert'
'critical'
'error'
'warning'
'notice'
'info'
'debug'
También puede definir sus propios tipos de logs para mas información
http://book.cakephp.org/2.0/en/core-libraries/logging.html
Resultado del registro