Chamilo is a learning management system focused on ease of use and accessibility
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.
 
 
 
 
 
 
chamilo-lms/main/inc/lib/log.class.php

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