Por más entorno de debug que exista, los archivos de log son fundamentales para tracear el comportamiento de cualquier aplicación. Una aplicación web escrita en PHP no se escapa de este requerimiento tampoco.
Por tal motivo, navegando, encontré una sencilla clase para generar archivos de log. Y como siempre se necesita tener a mano código como tal, no viene mal su publicación.
El código de la clase es pequeño y sencillo, muestra por cada línea la hora y fecha en la que se escribió, así como arrays formateados. Algunas mejoras que se le pueden realizar, pero que no se escriben para no manchar el código original del autor son:
Ahora si, el código y luego un pequeño ejemplo de su utilización:
class myLogger {
protected $_fileName = 'myLogger.log';
/**
* @param string $path can be a directory o a file path
*/
public function __construct($path) {
if (empty($path)){
Throw new Exception("Path must be filled");
}
if (!file_exists($path)) {
Throw new Exception("The Path doesn't exists.");
}
if (!is_writeable($path)) {
Throw new Exception("You can write on the give path");
}
$this->_path = $this->_parsePath($path);
}
/**
* Validate the path the add the filename to the path
* @param String $path
* @return String
*/
protected function _parsePath($path) {
$strLenght = strlen($path);
$lastChar = substr($path, $strLenght - 1, $strLenght);
$path = $lastChar != "/" ? $path . "/" : $path;
if ( is_dir($path) ) {
return $path . $this->_fileName;
} else {
return $path;
}
}
/**
* Will save the path on the give path
* @param String $line
*/
protected function _save($line) {
$fhandle = fopen ($this->_path, "a+");
f write($fhandle, $line);
fclose($fhandle);
}
/**
* main function to add lines to the logging file
* @param String $line
*/
public function addLine($line){
$line = is_array($line) ? print_r($line, true) : $line;
$line = date("d-m-Y h:i:s") . ": $line\n";
$this->_save($line);
}
}
Vía: Pain Dev
4 Respuestas para "Clase de Logs para PHP"
Bastante curioso, yo en un cms que estoy elaborando tengo algo parecido, quizas no tan completo pero si con mas informacion:
Es una mera funcion contenida por una clase que se encarga de realizar una traza hasta el lugar donde ha fallado el script aportando quizas un exceso de informacion pero que puede ayudar a debugear.
//—————————————————————-
// Funcion: lanzar_error
// Ambito: Privado
// Simplemente lanza un error con el mensaje indicado
private function lanzar_error( $mensaje ){
if ( true ){
throw new Exception( $mensaje , $errorn );
}
}
//—————————————————————-
// Funcion: error
// Ambito: Publico
// Realiza una traza inversa desde donde se produjo el error hasta
// el fichero fuente de inclusión para realizar un mejor depurado.
public function error( $m ){
global $error;
try {
$this->lanzar_error($m,$n);
} catch ( Exception $e ) {
$traza = $e->getTrace();
foreach( $traza as $num => $t ){
echo ‘
[+/-] Traza #’,$num,”;
echo ‘Mensaje : ‘,$m,”;
foreach( $t as $etiqueta => $mensaje ){
if (!is_array($mensaje)){
if ( $mensaje != ‘->’ ){
echo ‘‘,$etiqueta,’ : ‘,$mensaje,”;
}
}else{
if ( $mensaje != ‘->’ ){
echo ‘‘,$etiqueta,’ : ‘;
print_r($mensaje);
echo ”;
}
}
}
echo ”;
}
exit();
}
} // Fin funcion error
Hombre, la clase está bien para el propósito que tiene, un logger sencillito, pero lo más adecuado sería poder tener distintos niveles de prioridad para reducir o ampliar el nivel de logging según sea necesario, incluso poder desactivarlo completamente sin tener que tocar el código.
Yo tengo mi propia versión haciendo uso de Zend_Log que es muchisimo más flexible:
http://framework.zend.com/manual/en/zend.log.html
Recomendado 100%
En caso de implementar este tipo de logging, y si se presenta que varios usuarios se conectan en forma simultanea, como se realiza el logging?…tendra problemas en grabar el archivo de texto?…como hacer que todos puedan acceder sin que se pierda informacion?…..
convendria utilizar la misma base de datos para hacer una registro de logeo?
Saludos.-
Interesante!!!
Comentarios: