<?php
define( 'LOGGER_NEW_LINE' , "\r\n" ) ;
class Logger
{
/**
* Jedyna instancja klasy
* @var Logger
*/
private static $_instance = null ;
/**
* Zwraca jedyną instancję klasy
*
* @return Logger
*/
public static function getInstance()
{
if( is_null( self::$_instance ) )
{
self::$_instance = new Logger() ;
}
return self::$_instance ;
}
private $absolute_path ;
private $logs_path ;
private $date ;
private $log_file ;
/**
* W konstruktorze następuje połaczenie z bazą danych.
*
* @return Logger
*/
private function __construct()
{
$this->absolute_path = dirname( __FILE__ ) . '/' ;
$this->logs_path = $this->absolute_path . 'logs/' ;
$this->date = date( 'Y_m_d' ) ;
$this->log_file = $this->logs_path . 'logs_' . $this->date . '.log' ;
$this->clearOldLogs( 5 ) ;
}
/**
* Usuwa stare pliki logów
* @return unknown_type
*/
private function clearOldLogs( $maxHistory )
{
$files = glob( $this->logs_path.'*.log' ) ;
$this->log( $files , __FUNCTION__ , __CLASS__ , __FILE__ , __LINE__ ) ;
// przerwanie usunięcia jeśli plików jest zbyt mało
if( sizeof( $files ) <= $maxHistory )
return ;
for ($i = 0; $i < sizeof( $files ) - $maxHistory; $i++ )
{
unlink( $files[ $i ] ) ;
}
}
/**
* Zapis danych do pliku
* @param $data Dane do zapisania w logu
* @param $function Zawsze jako parametr podawać __FUNCTION__
* @param $class Zawsze jako parametr podawać __CLASS__
* @param $file Zawsze jako parametr podawać __FILE__
* @param $line Zawsze jako parametr podawać __LINE__
*/
public function log( $data , $function , $class = null , $file = null , $line = null )
{
ob_start( $log_str ) ;
echo date( 'H:i:s' ) , ' ' , $class , '::' , $function , ' in ' , $file , ' on line ' , $line , LOGGER_NEW_LINE ;
var_dump( $data ) ;
echo LOGGER_NEW_LINE , LOGGER_NEW_LINE ;
$log_str = ob_get_contents() ;
ob_end_clean() ;
$log_str = str_replace( array( "\r\n" , "\n" ) , LOGGER_NEW_LINE , $log_str );
file_put_contents( $this->log_file , $log_str , FILE_APPEND ) ;
}
}
?>
A o to przykład użycia:
Logger::getInstance()->log( $someData , __FUNCTION__ , __CLASS__ , __FILE__ , __LINE__ ) ;
Logger zapisuje dane w formie wyświetlanej przez funkcję var_dump.
Brak komentarzy:
Prześlij komentarz