Foros del Web » Programando para Internet » PHP »

APORTE: Pequeño sistema de logs

Estas en el tema de APORTE: Pequeño sistema de logs en el foro de PHP en Foros del Web. Hola: he aprovechado que tengo un pequeño respiro en el trabajo para escribir por aquí, ya que hace tiempo que no me paso. He hecho ...
  #1 (permalink)  
Antiguo 13/09/2008, 16:40
 
Fecha de Ingreso: mayo-2006
Ubicación: Madrid
Mensajes: 153
Antigüedad: 18 años
Puntos: 3
APORTE: Pequeño sistema de logs

Hola:

he aprovechado que tengo un pequeño respiro en el trabajo para escribir por aquí, ya que hace tiempo que no me paso.

He hecho una pequeña clase para crear logs. Es sencillita de entender, pero aquí va un pequeño repaso al código:

Primero, las variables gloables que se usarán:
Código PHP:
public $logdir='/temp/'
Como su nombre indica, contiene el path de log

Código PHP:
public $logname=false
Esta también se explica sola: el nombre del fichero.

Código PHP:
public $prefix=true
Si está a true, todas las entradas que se generen en el archivo de log irán precedidas por un prefijo (en este caso, la hora de su inserción)

Código PHP:
public $separator="\n"
Este será el caracter de salto de linea para cada entrada

Código PHP:
private $_filehandler=false
Aquí guardamos el handler del archivo creado. Esta variable es privada.

Ahora vamos con las funciones
Código PHP:
    public function log($str){
        if(!
$this->logname$this->logname=date("d-m-o").".txt";
        if(!
$this->_filehandler$this->_createfile(); //create log´s file if not exists
        
$this->_writeintofile($str);   //write into the file
    

Esta es la única función accesible desde fuera. Recibe la cadena a "logear" en $str. Comprobamos si _logname tiene algo. Si no es así, generamos su valor con la fecha actual. Tras esto creamos el archivo de log siempre y cuando no esté creado (es decir, si _filehandler no es false. A esto, y para ser un poco pedante, se le llama "lazy init) y con writeintofile la añadimos al fichero.

Código PHP:
    private function _createfile(){
        
$file=$this->logdir.$this->logname;
        
$this->_filehandler=fopen($file,'a');
        if(!
$this->_filehandler) die("Error: no se pudo generar el fichero");
        return;
    } 
La función se encarga de genearar el archivo del log en disco. En $file guarda el path completo del log. Si no se ha podido obtener el handler del archivo, salimos

Código PHP:
    private function _getprefix(){
        
$prefix='';
        
$prefix.="[".date("d-m-o H:i:s")."]";
        return 
$prefix;
    } 
Con esta función obtenermos el prefijo para poner a cada entrada (sólo lo obtendremos si $prefix==true). Devuelve la fecha actual.

Código PHP:
    private function _writeintofile($str){
        if(
$this->prefix$str=$this->_getprefix()." ".$str;
        
fwrite($this->_filehandler,$str.$this->separator);
    } 
Esta función se encarga de escribir al log el contenido de $str (más el caracter que se esté usando como separador para que "salte" de línea), pero primero comprueba si tiene que añadirle prefijo a la entrada.

Código PHP:
    function __destruct(){
        if(!
$this->_filehandler) return;
        
fclose($this->_filehandler);    //close the file handler
    

Por último, al destruirse la instancia de la clase, cerramos el handler del archivo (siempre y cuando existiese).

Su uso es muy sencillo:

Código PHP:
<?php
include_once('log.php');
$p=new logcreator();
$p->logdir='/tmp/';
$p->logname='log.txt';
$p->log("Hola, soy un log que me guardo en /tmp/log.txt");
$p->prefix=false;
$p->log("Hola, ahora soy un log sin prefijo");
?
php>

Quizá esto sea más útil para PHP-Cli que orientado a web.

Espero que a alguno os pueda resultar útil. Espero mejorarlo con el tiempo.

Código completo:
Código PHP:

Class logcreator{

    public 
$logdir='/temp/';
    public 
$logname=false;  
    public 
$prefix=true;  
    public 
$separator="\n";  
    private 
$_filehandler=false;  

    public function 
log($str){
        if(!
$this->logname$this->logname=date("d-m-o").".txt";
        if(!
$this->_filehandler$this->_createfile(); //create log´s file if not exists
        
$this->_writeintofile($str);   //write into the file
    
}  

    private function 
_createfile(){
        
$file=$this->logdir.$this->logname;
        
$this->_filehandler=fopen($file,'a');
        if(!
$this->_filehandler) die("Error: no se pudo generar el fichero");
        return;
    }  

    private function 
_getprefix(){
        
$prefix='';
        
$prefix.="[".date("d-m-o H:i:s")."]";
        return 
$prefix;
    } 

    private function 
_writeintofile($str){
        if(
$this->prefix$str=$this->_getprefix()." ".$str;
        
fwrite($this->_filehandler,$str.$this->separator);
    }  

    function 
__destruct(){
        if(!
$this->_filehandler) return;
        
fclose($this->_filehandler);    //close the file handler
    
}  



Saludos!!

Última edición por stardust; 23/04/2012 a las 08:50
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 08:15.