You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							223 lines
						
					
					
						
							6.3 KiB
						
					
					
				
			
		
		
	
	
							223 lines
						
					
					
						
							6.3 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
use Monolog\Logger;
 | 
						|
 | 
						|
/**
 | 
						|
 * Since static constructors do not exist in php the line below serves as a
 | 
						|
 * substitute.
 | 
						|
 *
 | 
						|
 * Log is used by install which do not use autoload at the moment. If it becomes
 | 
						|
 * the case then the line below may/should be moved to the main autoloading
 | 
						|
 * function.
 | 
						|
 */
 | 
						|
Log::register_autoload();
 | 
						|
 | 
						|
/**
 | 
						|
 * Provides access to the main log - i.e. stderr - and allows to register events.
 | 
						|
 * It is a facade to the monolog library:
 | 
						|
 *
 | 
						|
 * Log::error('message');
 | 
						|
 * Log::warning('message');
 | 
						|
 * ...
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * Note:
 | 
						|
 * This class uses a static approach which has the benefit of being simpler but do
 | 
						|
 * no allow as much freedom as using an object approche. Another approach could be
 | 
						|
 *
 | 
						|
 * Chamilo::log()->error('message');
 | 
						|
 * Chamilo::log()->warning('message');
 | 
						|
 *
 | 
						|
 * To somewhat alleviate this issue the user can register a different logger if hew
 | 
						|
 * wants.
 | 
						|
 *
 | 
						|
 * @license see /license.txt
 | 
						|
 * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva
 | 
						|
 */
 | 
						|
class Log
 | 
						|
{
 | 
						|
 | 
						|
    public static function register_autoload()
 | 
						|
    {
 | 
						|
        static $has_run = false;
 | 
						|
        if ($has_run) {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        /*$directory = api_get_path(LIBRARY_PATH) . 'symfony';
 | 
						|
        if (!class_exists('Doctrine\Common\ClassLoader', false)) {
 | 
						|
            require_once $directory . '/Doctrine/Common/ClassLoader.php';
 | 
						|
        }
 | 
						|
 | 
						|
        $loader = new Doctrine\Common\ClassLoader('Monolog', $directory);
 | 
						|
        $loader->register();*/
 | 
						|
 | 
						|
        $has_run = true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     *
 | 
						|
     * @return \Monolog\Logger
 | 
						|
     */
 | 
						|
    public static function default_logger()
 | 
						|
    {
 | 
						|
        $name = 'chamilo';
 | 
						|
        $result = new Logger($name);
 | 
						|
        $handler = new Monolog\Handler\StreamHandler('php://stderr');
 | 
						|
        $handler->setFormatter(new Monolog\Formatter\LineFormatter('[%datetime%] [%level_name%] [%channel%] %message%' . PHP_EOL, 'Y-m-d H:i:s')); //%context% %extra%
 | 
						|
        $result->pushHandler($handler);
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
 | 
						|
    private static $logger = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     *
 | 
						|
     * @return \Monolog\Logger
 | 
						|
     */
 | 
						|
    public static function logger()
 | 
						|
    {
 | 
						|
        if (empty(self::$logger)) {
 | 
						|
            self::$logger = self::default_logger();
 | 
						|
        }
 | 
						|
        return self::$logger;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function set_logger($value)
 | 
						|
    {
 | 
						|
        self::$logger = $value;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the
 | 
						|
     * @param type $index
 | 
						|
     * @return type
 | 
						|
     */
 | 
						|
    public static function frame($index)
 | 
						|
    {
 | 
						|
        $result = debug_backtrace();
 | 
						|
        return isset($result[$index]) ? $result[$index] : array();
 | 
						|
    }
 | 
						|
 | 
						|
    public static function write($level, $message, $context = array())
 | 
						|
    {
 | 
						|
        /*
 | 
						|
         * Note that the same could be done with a monolog processor.
 | 
						|
         */
 | 
						|
        if (!isset($context['file'])) {
 | 
						|
            $trace = debug_backtrace();
 | 
						|
            $trace = $trace[1];
 | 
						|
            $context['file'] = $trace['file'];
 | 
						|
            $context['line'] = $trace['line'];
 | 
						|
        }
 | 
						|
        $file = $context['file'];
 | 
						|
        $root = realpath(api_get_path(SYS_PATH));
 | 
						|
        $file = str_replace($root, '', $file);
 | 
						|
        $file = trim($file, DIRECTORY_SEPARATOR);
 | 
						|
        $line = $context['line'];
 | 
						|
        $line = str_pad($line, 4, ' ', STR_PAD_LEFT);
 | 
						|
        $message = "[$file:$line] " . $message;
 | 
						|
 | 
						|
        self::logger()->addRecord($level, $message, $context);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a log record at the DEBUG level.
 | 
						|
     *
 | 
						|
     * This method allows to have an easy ZF compatibility.
 | 
						|
     *
 | 
						|
     * @param string $message The log message
 | 
						|
     * @param array $context The log context
 | 
						|
     * @return Boolean Whether the record has been processed
 | 
						|
     */
 | 
						|
    public static function debug($message, array $context = array())
 | 
						|
    {
 | 
						|
        return self::write(Logger::DEBUG, $message, $context);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a log record at the INFO level.
 | 
						|
     *
 | 
						|
     * This method allows to have an easy ZF compatibility.
 | 
						|
     *
 | 
						|
     * @param string $message The log message
 | 
						|
     * @param array $context The log context
 | 
						|
     * @return Boolean Whether the record has been processed
 | 
						|
     */
 | 
						|
    public static function info($message, array $context = array())
 | 
						|
    {
 | 
						|
//        return self::write(Logger::INFO, self::message($message), $context);
 | 
						|
        return self::write(Logger::INFO, $message, $context);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a log record at the INFO level.
 | 
						|
     *
 | 
						|
     * This method allows to have an easy ZF compatibility.
 | 
						|
     *
 | 
						|
     * @param string $message The log message
 | 
						|
     * @param array $context The log context
 | 
						|
     * @return Boolean Whether the record has been processed
 | 
						|
     */
 | 
						|
    public static function notice($message, array $context = array())
 | 
						|
    {
 | 
						|
        return self::write(Logger::INFO, $message, $context);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a log record at the WARNING level.
 | 
						|
     *
 | 
						|
     * This method allows to have an easy ZF compatibility.
 | 
						|
     *
 | 
						|
     * @param string $message The log message
 | 
						|
     * @param array $context The log context
 | 
						|
     * @return Boolean Whether the record has been processed
 | 
						|
     */
 | 
						|
    public static function warning($message, array $context = array())
 | 
						|
    {
 | 
						|
        return self::write(Logger::WARNING, $message, $context);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a log record at the ERROR level.
 | 
						|
     *
 | 
						|
     * This method allows to have an easy ZF compatibility.
 | 
						|
     *
 | 
						|
     * @param string $message The log message
 | 
						|
     * @param array $context The log context
 | 
						|
     * @return Boolean Whether the record has been processed
 | 
						|
     */
 | 
						|
    public static function error($message, array $context = array())
 | 
						|
    {
 | 
						|
        return self::write(Logger::ERROR, $message, $context);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a log record at the CRITICAL level.
 | 
						|
     *
 | 
						|
     * This method allows to have an easy ZF compatibility.
 | 
						|
     *
 | 
						|
     * @param string $message The log message
 | 
						|
     * @param array $context The log context
 | 
						|
     * @return Boolean Whether the record has been processed
 | 
						|
     */
 | 
						|
    public static function crit($message, array $context = array())
 | 
						|
    {
 | 
						|
        return self::write(Logger::CRITICAL, $message, $context);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds a log record at the ALERT level.
 | 
						|
     *
 | 
						|
     * This method allows to have an easy ZF compatibility.
 | 
						|
     *
 | 
						|
     * @param string $message The log message
 | 
						|
     * @param array $context The log context
 | 
						|
     * @return Boolean Whether the record has been processed
 | 
						|
     */
 | 
						|
    public static function alert($message, array $context = array())
 | 
						|
    {
 | 
						|
        return self::write(Logger::ALERT, $message, $context);
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 |