Files
sourceforge-ossez/oss/piwik/trunk/core/Log.php
T
YuCheng Hu 1ec191d88b 添加 Piwik 到代码库中。
+YUCHENG HU+

git-svn-id: https://svn.code.sf.net/p/hawebs/svn@423 a2543c7e-f6e9-4f8a-8bff-1ffc34733512
2010-07-10 01:18:10 +00:00

183 lines
4.1 KiB
PHP

<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
* @version $Id: Log.php 2266 2010-06-03 17:47:32Z vipsoft $
*
* @category Piwik
* @package Piwik
*/
/**
*
* @package Piwik
* @subpackage Piwik_Log
* @see Zend_Log, libs/Zend/Log.php
* @link http://framework.zend.com/manual/en/zend.log.html
*/
abstract class Piwik_Log extends Zend_Log
{
protected $logToDatabaseTableName = null;
protected $logToDatabaseColumnMapping = null;
protected $logToFileFilename = null;
protected $fileFormatter = null;
protected $screenFormatter = null;
function __construct( $logToFileFilename,
$fileFormatter,
$screenFormatter,
$logToDatabaseTableName,
$logToDatabaseColumnMapping )
{
parent::__construct();
$log_dir = Zend_Registry::get('config')->log->logger_file_path;
if($log_dir[0] != '/' && $log_dir[0] != DIRECTORY_SEPARATOR)
{
$log_dir = PIWIK_USER_PATH . '/' . $log_dir;
}
$this->logToFileFilename = $log_dir . '/' . $logToFileFilename;
$this->fileFormatter = $fileFormatter;
$this->screenFormatter = $screenFormatter;
$this->logToDatabaseTableName = Piwik_Common::prefixTable($logToDatabaseTableName);
$this->logToDatabaseColumnMapping = $logToDatabaseColumnMapping;
}
static public function dump($var)
{
Zend_Registry::get('logger_message')->logEvent(var_export($var, true));
}
function addWriteToFile()
{
Piwik_Common::mkdir(dirname($this->logToFileFilename));
$writerFile = new Zend_Log_Writer_Stream($this->logToFileFilename);
$writerFile->setFormatter( $this->fileFormatter );
$this->addWriter($writerFile);
}
function addWriteToNull()
{
$this->addWriter( new Zend_Log_Writer_Null );
}
function addWriteToDatabase()
{
$writerDb = new Zend_Log_Writer_Db(
Zend_Registry::get('db'),
$this->logToDatabaseTableName,
$this->logToDatabaseColumnMapping);
$this->addWriter($writerDb);
}
function addWriteToScreen()
{
$writerScreen = new Zend_Log_Writer_Stream('php://output');
$writerScreen->setFormatter( $this->screenFormatter );
$this->addWriter($writerScreen);
}
public function getWritersCount()
{
return count($this->_writers);
}
/**
* Log an event
*/
public function log($event, $priority, $extras = null)
{
// sanity checks
if (empty($this->_writers)) {
throw new Zend_Log_Exception('No writers were added');
}
$event['timestamp'] = date('c');
// pack into event required by filters and writers
$event = array_merge( $event, $this->_extras);
// abort if rejected by the global filters
foreach ($this->_filters as $filter) {
if (! $filter->accept($event)) {
return;
}
}
// send to each writer
foreach ($this->_writers as $writer) {
$writer->write($event);
}
}
}
/**
*
* @package Piwik
* @subpackage Piwik_Log
*/
class Piwik_Log_Formatter_FileFormatter implements Zend_Log_Formatter_Interface
{
/**
* Formats data into a single line to be written by the writer.
*
* @param array $event event data
* @return string formatted line to write to the log
*/
public function format($event)
{
foreach($event as &$value)
{
$value = str_replace("\n", '\n', $value);
$value = '"'.$value.'"';
}
$ts = $event['timestamp'];
unset($event['timestamp']);
return $ts . ' ' . implode(" ", $event) . "\n";
}
}
/**
*
* @package Piwik
* @subpackage Piwik_Log
*/
class Piwik_Log_Formatter_ScreenFormatter implements Zend_Log_Formatter_Interface
{
function formatEvent($event)
{
// no injection in error messages, backtrace when displayed on screen
return array_map('htmlspecialchars', $event);
}
function format($string)
{
return self::getFormattedString($string);
}
static public function getFormattedString($string)
{
if(Piwik_Common::isPhpCliMode())
{
$string = str_replace(array('<br>','<br />','<br/>'), "\n", $string);
if(is_array($string))
{
for($i=0; $i< count($string); $i++)
{
$string[$i] = strip_tags($string[$i]);
}
}
else
{
$string = strip_tags($string);
}
}
return $string;
}
}