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:

  • Especificar el nombre del archivo de log en el constructor o bien formarlo con el nombre del archivo o según el gusto de cada uno. Simplemente, es evitar el cableado del mismo (hoy en día, protected $_fileName = 'myLogger.log';)
  • Crear archivos de logs por año y mes, o por año mes y día, esto con el único objetivo de no disponer de un único archivo enorme que con el paso del tiempo no pare de crecer y crecer.

Ahora si, el código y luego un pequeño ejemplo de su utilización:

/**
     * myLogger
     * @author Edder Rojas Douglas
     * @version 0.2
     */

    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);
        }
    }

require_once('myLogger.php');

$log = new myLogger(dirname(__FILE__) . "/log");
$log->addLine(array("testing", "my", 'data'));

Vía: Pain Dev