freenetis-github/system/core/Log.php @ d4aa3ba3
8baed187 | Michal Kliment | <?php defined('SYSPATH') or die('No direct script access.');
|
|
/**
|
|||
* Message file logging class.
|
|||
*
|
|||
* $Id: Log.php 1930 2008-02-05 22:35:57Z armen $
|
|||
*
|
|||
* @package Core
|
|||
* @author Kohana Team
|
|||
* @copyright (c) 2007 Kohana Team
|
|||
* @license http://kohanaphp.com/license.html
|
|||
*/
|
|||
final class Log {
|
|||
private static $log_directory;
|
|||
private static $types = array('error' => 1, 'debug' => 2, 'info' => 3);
|
|||
private static $messages = array();
|
|||
/**
|
|||
* Set the the log directory. The log directory is determined by Kohana::setup.
|
|||
*
|
|||
* @param string full log directory path
|
|||
* @return void
|
|||
*/
|
|||
public static function directory($directory)
|
|||
{
|
|||
if (self::$log_directory === NULL)
|
|||
{
|
|||
// Set the log directory if it has not already been set
|
|||
self::$log_directory = rtrim($directory, '/').'/';
|
|||
}
|
|||
}
|
|||
/**
|
|||
* Add a log message.
|
|||
*
|
|||
* @param string info, debug, or error
|
|||
* @param string message to be logged
|
|||
* @return void
|
|||
*/
|
|||
public static function add($type, $message)
|
|||
{
|
|||
if (is_array($message))
|
|||
{
|
|||
$message = implode(' ', $message);
|
|||
}
|
|||
if (trim($message) == '' ||
|
|||
!isset(self::$types[$type]) ||
|
|||
self::$types[$type] > Config::get('log_threshold'))
|
|||
{
|
|||
return;
|
|||
}
|
|||
self::$messages[strtolower($type)][] = array
|
|||
(
|
|||
date('Y-m-d G:i:s'),
|
|||
strip_tags($message),
|
|||
url::current(TRUE),
|
|||
);
|
|||
}
|
|||
/**
|
|||
* Add a log exception message
|
|||
*
|
|||
* @param Exception $e
|
|||
*/
|
|||
public static function add_exception(Exception $e)
|
|||
{
|
|||
self::add('error', Kohana::lang(
|
|||
'core.transaction_exception',
|
|||
$e->getMessage(), $e->getFile(),
|
|||
$e->getLine(), $e->getTraceAsString()
|
|||
));
|
|||
}
|
|||
/**
|
|||
* Write the current log to a file.
|
|||
*
|
|||
* @return void
|
|||
*/
|
|||
public static function write()
|
|||
{
|
|||
// Set the log threshold
|
|||
$threshold = Config::get('log_threshold');
|
|||
// Don't log if there is nothing to log to
|
|||
if ($threshold < 1 OR count(self::$messages) === 0) return;
|
|||
// Set the log filename
|
|||
$filename = self::$log_directory.date('Y-m-d').'.log'.EXT;
|
|||
// Compile the messages
|
|||
$messages = '';
|
|||
foreach(self::$messages as $type => $data)
|
|||
{
|
|||
foreach($data as $date => $text)
|
|||
{
|
|||
list($date, $message, $url) = $text;
|
|||
$messages .= $date . ' -- ' . $type . ': ' . $message
|
|||
. ' URL: ' . $url . "\r\n";
|
|||
}
|
|||
}
|
|||
// No point in logging nothing
|
|||
if ($messages == '')
|
|||
return;
|
|||
// Create the log file if it doesn't exist yet
|
|||
if ( ! file_exists($filename))
|
|||
{
|
|||
touch($filename);
|
|||
chmod($filename, 0644);
|
|||
// Add our PHP header to the log file to prevent URL access
|
|||
$messages = "<?php defined('SYSPATH') or die('No direct script access.'); ?>\r\n\r\n".$messages;
|
|||
}
|
|||
// add separators between calls
|
|||
$messages = $messages . "\n";
|
|||
// Append the messages to the log
|
|||
file_put_contents($filename, $messages, FILE_APPEND) or trigger_error
|
|||
(
|
|||
'The log file could not be written to. Please correct the permissions and refresh the page.',
|
|||
E_USER_ERROR
|
|||
);
|
|||
}
|
|||
} // End Log
|